CXF WSDL2JAVA_chenghan9242的博客-程序员秘密

技术标签: java  json  

http://blog.chinaunix.net/u2/73798/showart_2002108.html




将wdl  binder  http://service.test.com/替换为自己的namespace。


命令格式如下:

wsdl2java -b jaxb-binding-date.xml http://localhost:8080/cxfservice/services/XXXXX?wsdl

#########################################################

CXF wsdl2Java

[img]/admin/templates/default/images/right_line.gif" border="0" alt="" width="502" height="9[/img]



一.  简介
Apache CXF 是一个Service框架,他简化了Service的创建, CXF实现了JAX-WS2.0规范,并通过了JAX-WS2.0 TCK; CXF和Spring无缝集成;CXF支持多种传输协议(HTTP, JMS, Corba等), 支持多种Binding数据格式(SOAP,XML,JSON等), 支持多种DataBinding数据类型(JAXB, Aegis) 。CXF基于Interceptor的架构,使得整个框架非常易于扩展。


二.  如何发布并调用简单的web service实例

2.1.下载:apache-cxf-2.1.1  http://cxf.apache.org/download.html

2.2. 新建java project ,并加入apache-cxf-2.0.7\lib所有包,编写要发布的web service 接口和实现
import javax.jws.WebService;
@WebService 
public interface HelloWorld {  
     public String sayHello(String text);  
}
import javax.jws.WebService;  
@WebService(endpointInterface="test.HelloWorld")  
public class HelloWorldImpl implements HelloWorld {  
      public String sayHello(String text) {  
                  return "Hello" + text ;  
    }  
  } 
@WebService 注解表示是要发布的web 服务
name:用于Interface,属映射到wsdl:portType element的name属性。
targetNamespace:用于Interface和implement,如果不指定,缺省会使用包名倒序做为wsdl名空间。
serviceName:用于implement,表示wsdl服务名。
portName:用于implement,表示wsdl:port 的name属性。
endpointInterface:用于implement,指定Interface全名,包括包名。


2.3.发布web service
public class Server {
    protected Server() throws Exception {
         System.out.println("Starting Server");
         HelloWorldImpl implementor = new HelloWorldImpl();
         String address = " http://localhost:9000/helloWorld";
         Endpoint.publish(address, implementor);
    }
    public static void main(String args[]) throws Exception {
        new Server();
        System.out.println("Server ready...");
        Thread.sleep(5 * 60 * 1000);
        System.out.println("Server exiting");
        System.exit(0);
    }
}
运行后,在浏览器中输入 http://localhost:9000/helloWorld?wsdl将显示这个web service的wsdl.说明web service发布成功。


2.4.下面就开始创建一个客户端程序,访问这个web service, 同样新建java project ,并加入apache-cxf-2.0.7\lib所有包,由于CXF已经提供wsdl转化成java 的命令工具,所以创建一个build.xml,用来生成客户端程序。Bulid.xml内容如下:

<?xml version="1.0"?>
<project name="cxf wsdl2java" basedir=".">  
   <property name="cxf.home" location ="${basedir}/WebRoot/WEB-INF/"/>
   <path id="cxf.classpath">
      <fileset dir="${cxf.home}/lib">
         <include name="*.jar"/>
      </fileset>
   </path>     
   <target name="cxfWSDLToJava">
      <java classname="org.apache.cxf.tools.wsdlto.WSDLToJava" fork="true">
         <arg value="-client"/>
         <arg value="-d"/>
         <arg value="src"/>
         <arg value="http://localhost:9000/helloWorld?wsdl"/>
         <classpath>
            <path refid="cxf.classpath"/>
         </classpath>
      </java>
   </target>
</project>

或者: 配置环境变量%CXF_HOME%=E:\WebService\CXF\apache-cxf-2.1.1\apache-cxf-2.1.1(以我的目录为例),并在PATH后加上;%CXF_HOME%\bin在cmd命令行中输入wsdl2java如果显示其用法表示配置好了。
输入: wsdl2java -d src - client http://localhost:9000/helloWorld?wsdl 其作用上面的build.xml作用一样。
附加:wsdl2java用法:
wsdl2java -p com -d src -all  aa.wsdl
-p  指定其wsdl的命名空间,也就是要生成代码的包名:
-d  指定要产生代码所在目录
-client 生成客户端测试web service的代码
-server 生成服务器启动web  service的代码
-impl 生成web service的实现代码
-ant  生成build.xml文件
-all 生成所有开始端点代码:types,service proxy,,service interface, server mainline, client mainline, implementation object, and an Ant build.xml file.
详细用法见: http://cwiki.apache.org/CXF20DOC/wsdl-to-java.html
2.5.调用web service
public class MyClient {
      public static void main(String[] argv) {
        HelloWorld  hello = new HelloWorldImplService().getHelloWorldImplPort();
        System.out.println(hello.sayHello(&quot;Tom&quot;) ); 
      }
    }
注意:运行时,要一定先要发布web sevice.
三.  参考资料
1.CXF 主页: http://cxf.apache.org/
2. CXF中文讨论组: http://groups.google.com/group/cxf-zh 
3. Web service: http://www.w3school.com.cn/webservices/index.asp
4. WSDL: http://www.w3school.com.cn/wsdl/index.asp
5. SOAP:http://www.w3school.com.cn/soap/index.asp



转载于:https://my.oschina.net/u/1394322/blog/360010

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/chenghan9242/article/details/100779084

智能推荐

CCF201709-2 公共钥匙盒(100分)【模拟+优先队列】_海岛Blog的博客-程序员秘密

试题名称:公共钥匙盒问题描述  有一个学校的老师共用N个教室,按照规定,所有的钥匙都必须放在公共钥匙盒里,老师不能带钥匙回家。每次老师上课前,都从公共钥匙盒里找到自己上课的教室的钥匙去开门,上完课后,再将钥匙放回到钥匙盒中。   钥匙盒一共有N个挂钩,从左到右排成一排,用来挂N个教室的钥匙。一串钥匙没有固定的悬挂位置,但钥匙上有标识,所以老师们不会弄混钥匙。   每次取钥匙的时候,老师们都会找到自...

类与对象 - Java学习(二)_weixin_30294021的博客-程序员秘密

弄清楚类与对象的本质与基本特征,是进一步学习面向对象编程语言的基本要求。面向对象程序设计与面向过程程序设计在思维上存在着很大差别,改变一种思维方式并不是一件容易的事情。一、面向对象程序设计程序由对象组成,对象包含对用户公开的特定功能部分,和隐藏在其内部的实现部分。从设计层面讲,我们只关心对象能否满足要求,而无需过多关注其功能的具体实现。面对规模较小的问题时,面向过程的开发方式是比较理想的,但面...

Java中Map集合的四种访问方式_yesr2014的博客-程序员秘密

public static void main(String[] args) { Map map = new HashMap(); map.put("1", "value1"); map.put("2", "value2"); map.put("3", "value3"); //第一种:普遍使用,二次取值 System.out.println("通过Map.ke

AUTOSAR —— DCM模块简介_olddddd的博客-程序员秘密_dcm模块

概述AUTOSAR的DCM模块是诊断通讯模块,只要遵循的协议就是ISO 14229-1,包括UDS会话层和应用层,对底层通讯协议没有要求,可以是CAN、Lin或以太网(DoIP)等。DCM模块里面主要有三个子模块:DSL、DSD和DSP:DSL-Diagnostic Session Layer诊断会话层主要有以下三个作用:处理诊断请求和响应数据流。管理诊断状态(会话状态和安全状态)。管理时间参数。DSD-Diagnostic Service Dispatcher诊断服务调度程序是 DS_1671465600

H5活动抽现金红包,微信第三方APi接口代发红包_摇摇啦SCRM的博客-程序员秘密_小于一元红包 api

最近需要做一个能抽奖发红包的H5活动,用在微信上,本身微信支付自带了发红包功能,但是奈何开通此功能需要微信支付入驻满90天并且有1个月以上的交易流水,所以就放弃了,然后采用第三方接口实现红包,第三方接口正常的逻辑是:钱充值到第三方平台,其实钱是冲到了第三方的微信支付账号,然后调用第三方接口,第三就给用户发送红包链接,用户点击就可以领取红包啦。这里采用的第三方接口是:摇摇啦SCRM(技术Wechat:18674509508) 正常流程是:1、注册账号;2、可以找技术申请接口测试权限;3、正式使用的

JS中一些常用的数组方法_向前看傻帽儿的博客-程序员秘密

&amp;amp;lt;!doctype html&amp;amp;gt;&amp;amp;lt;html lang=&amp;quot;en&amp;quot;&amp;amp;gt;&amp;amp;lt;head&amp;amp;gt; &amp;amp;lt;meta charset=&amp;quot;UTF-8&amp;quot;&amp;amp;gt; &amp;amp;lt;meta name=&amp;quot;viewport&amp;quot;

随便推点

Android 的invalidate 与postInvalidate的用法_青峰的博客-程序员秘密

<br /><br />根据Android SDK api文档说明 invalidate 方法是用来更新视图(View)的方法,不过这东西的用法比较古怪 invalidate 方法如果你直接在主线程中调用,是看不到任何更新的。如果跟线程结合使用的话比如在下面的代码中就会抛出异常 UIThread implements Runnable{ public voi<br />   <br />根据Android SDK api文档说明<br />invalidate 方法是用来更新视图(View)的方法,不过这东

ckeditor粘贴word图片且图片自动上传源码_Mr_Zang666的博客-程序员秘密

这种方法是servlet,编写好在web.xml里配置servlet-class和servlet-mapping即可使用后台(服务端)java服务代码:(上传至ROOT/lqxcPics文件夹下)&lt;%@pagelanguage="java"import="java.util.*"pageEncoding="utf-8"%&gt;&lt;%@pagecontentType="text/html;charset=utf-8"%&gt;&lt;%@pageim...

Matlab开发独立部署的应用程序及matlab编程纪要_CODER0304的博客-程序员秘密_matlab小程序开发

目录一、matlab开发GUI1.GUI和app2.app的创建3.参数传递4.程序封装5.程序安装二、matlab编程纪要1.数据类型纪要2.hdf文件读取3.shp文件读取4.netcdf文件读取5.常用统计函数6.画图7.其他记录一、matlab开发GUI1.GUI和app2.app的创建3.参数传递4.程序封装5.程序安装二、matlab编程纪要1.数据类型纪要2.hdf文件读取3.shp文件读取4.netcdf文件读取5.常用统计函数6.画图7.其他记录...

Flutter快学快用08 单元测试:Flutter 应用单元测试,提升代码质量_dart单元测试_办公模板库 素材蛙的博客-程序员秘密

以上就是本课时的所有内容,学完本课时你需要掌握 Struct、Model、无状态和有状态组件的单元测试写法。下一课时我将把我们基础部分的所有基础知识汇总会一个脚手架,规范和统一基础模块。点击此链接查看本课时源码。

[C++核心编程] 1、内存分区模型_图像算法AI的博客-程序员秘密

文章目录1 内存分区模型1.1 程序运行前1.2 程序运行后1.3 new操作符1 内存分区模型C++程序在执行时,将内存大方向划分为4个区域代码区:存放函数体的二进制代码,由操作系统进行管理的全局区:存放全局变量和静态变量以及常量栈区:由编译器自动分配释放, 存放函数的参数值,局部变量等堆区:由程序员分配和释放,若程序员不释放,程序结束时由操作系统回收内存四区意义:不同区域存放的数据,赋予不同的生命周期, 给我们更大的灵活编程1.1 程序运行前​ 在程序编译后,生成了exe可执行程

【洛谷P1085】 不高兴的津津_poptox的博客-程序员秘密_洛谷p1085

题目描述津津上初中了。妈妈认为津津应该更加用功学习,所以津津除了上学之外,还要参加妈妈为她报名的各科复习班。另外每周妈妈还会送她去学习朗诵、舞蹈和钢琴。但是津津如果一天上课超过八个小时就会不高兴,而且上得越久就会越不高兴。假设津津不会因为其它事不高兴,并且她的不高兴不会持续到第二天。请你帮忙检查一下津津下周的日程安排,看看下周她会不会不高兴;如果会的话,哪天最不高兴。输入格式输入包括7...

推荐文章

热门文章

相关标签