CXF 操作webservice

这里以apache-cxf-2.4.3为例:

首先使用工具生成代码

第一步:  简述CXF 流程

第一步:通过自定义的WEB服务接口生成WSDL描述性文档。

第二步:通过WSDL描述性文档生成WEBSERVICE服务端和客户端。

步骤一:

         在应用CXF前,要知道CXF有哪些作用;

1.      服务端

在我们利用CXF编写webservice服务端时,首先明白CXF时根据你自己定义的接口来生成WSDL文件,此WSDL文件的作用为生成Webservice 服务端代码(此WSDL文件不是最终发布的WSDL文件,最终发布的文件是根据程序生成);然后根据生成的WSDL文件来生成服务端代码(在生成版本的问题会产生版本问题,在报错的代码中会提示你生成的代码加入

//This constructor requires JAX-WS API 2.2. You will need to endorse the 2.2
//API jar or re-run wsdl2java with "-frontend jaxws21" to generate JAX-WS 2.1
//compliant code instead.

);根据生成相应的代码来调用你业务相应的操作;

(需要注意的是:根据Interface来生成WSDL,要想生成的WSDL会详细的展示接口定义的参数的属性的名称需要在接口中指定类@WebService(name="SAPOperationInterface",targetNamespace = "http://test.com/")

方法@WebMethod(operationName="acceptBrandInfo")

参数@WebParam(name="brandcode")!如果不指定的话,生成的参数会为arg0,arg1等问题);


还有个问题就是要在生成的代码中取掉,wsdlLocation = "file:/D:/Tools/WorkSpace/MyProject/*.wsdl",  

因为这是你自己本地的文件,优先级比较高,但当你提交代码,服务器上没有你的文件,所以又可能报错

2.      客服端

在我们编写客服端的时候,可以根据相应的服务端给我们的WSDL文件来生成

客服端代码(这种情况适合于返回的为复杂类型,如:对象,List等),同样也可以用CXF提供的工厂类来操作(这种情况适合简单类型,如:String,int等);

步骤二:

l  首先下载apache-cxf-2.4.3组件包,并解压,可以把CXF配置到环境变量中

l  新建java project,创建一个JAVA类,并写入如下代码

public class TestMain {

public static void main(Stringargs[]){

JavaToWS.main(

new String[]{"-o","WsTest.wsdl","-wsdl","com.cxfinterface.WsInterFace"})

}

}

注:其中“-o”是固定参数,“WsTest.wsdl”是要发布的WSDL文件,“-wsdl”固定,“com.cxfinterface.WsInterFace”是定义要发布的服务接口。

l   Run上面的JAVA类,会在工程目录下生成一个WSDL文件。

 

步骤三:

l   使用JAVA命令将WSDL描述文档生成对应的JAVA类,命令使用如下:

wsdl2java -p com.cxfserver -d src –all aa.wsdl

注:此处不要用 –all 如果生成服务端用-impl ,客服端可以用-client等(在生成代码时,要明确生成哪方面的代码,避免用-all,范例先用-all表示)

-p 需要生成文件所在的包名

-d 文件生成后存放的路径

-all 生成所有文件(此处可以为Impl , Server , Client等操作,要根据你相应的操作来设定)

 

举个例子:

wsdl2java -p com.test -d E:\temp -all  E:\ATG\WsTest.wsdl

对应E:\ATG\WsTest.wsdl文件生成一个服务端,包名为com.test,生成后文件存放在E:\temp

 

注:文后附属命令其他参数含义,更多具体可参考apache官方文档

 

l   将生成后的文件拷贝到对应的包目录下

 

到此为止,CXF工具生成WEBSERVICE代码就结束了

但本身CXF与Spring是耦合的,我们需要对其进行解耦;

下面将CXF从SPRING中解偶,具体是重写org.apache.cxf.transport.servlet.CXFNonSpringServlet;这个类

 

至于为什么这么重写,我只是简单看过,没有分析内部,有兴趣的可以自己分析,另外这个例子中只绑定发布了一个方法,需要同时发布多个方法提供公用接口的童鞋,可以自己琢磨下。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值