最近在研究ProcessMaker,ProcessMaker 2.5版本是用php发布的webservice,所以需要采用java 的cxf调用php的webservice过程。
要了解Web Service,关键的是wsdl。
步骤一:采用cxf根据wsdl生成java 类,并把java类拷贝到工程相应目录(转自:http://blog.163.com/kangle0925@126/blog/static/27758198201363111718168)
1、先下载cxf包:http://cxf.apache.org/download.html,现在cxf包。
2、解压缩包,通过cmd命令进入到bin目录下
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.
步骤二:修改cxf的bean配置文件(spring集成)
<bean id="wsSampleServiceClient" class="com.winssage.demo.module.webserviceclientsample.domain.ProcessMakerServiceSoap"
factory-bean="wsSampleClientFactory" factory-method="create"/>
<bean id="wsSampleClientFactory" class="org.apache.cxf.jaxws.JaxWsProxyFactoryBean">
<property name="serviceClass" value="com.winssage.demo.module.webserviceclientsample.domain.ProcessMakerServiceSoap"/>
<property name="address" value="http://192.168.1.215:80/sysworkflow/en/classic/services/soap2"/>
</bean>
ProcessMakerServiceSoap:为从wsdl生成的webservice 接口类(interface),必须赋值予工厂类org.apache.cxf.jaxws.JaxWsProxyFactoryBean的serviceClass属性。
工厂类org.apache.cxf.jaxws.JaxWsProxyFactoryBean的address属性:必须取自wsdl.xml文件中的service配置,如下
<service name="ProcessMakerService">
<documentation>ProcessMaker Web Service</documentation>
<port name="ProcessMakerServiceSoap" binding="xs0:ProcessMakerServiceSoap">
<soap12:address location="http://192.168.1.215:80/sysworkflow/en/classic/services/soap2"/>
</port>
</service>
错误解决:A class/interface with the same name "XXX**" is already in use.
目前可选择的方案: (转自http://chenlin10058.iteye.com/blog/1558591)
1.使用-autoNameResolution自动处理
wsdl2java -autoNameResolution http://localhost:8060/soa/services/otherTrackedVehicleSoapService?wsdl
or
wsimport -p com.test.client -keep http://localhost:8060/soa/services/otherTrackedVehicleSoapService?wsdl-B-XautoNameResolution
错误解决:super相关代码编译报错:
- //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. -
public IcpBusinessService(WebServiceFeature ... features) { -
super(WSDL_LOCATION, SERVICE, features); -
} -
-
//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. -
public IcpBusinessService(URL wsdlLocation, WebServiceFeature ... features) { -
super(wsdlLocation, SERVICE, features); -
} -
-
//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. -
public IcpBusinessService(URL wsdlLocation, QName serviceName, WebServiceFeature ... features) { -
super(wsdlLocation, serviceName, features); -
} $
其不能正常编译通过是由于jax-ws2.2规约与java6冲突,执行命令:
wsdl2java -frontend jaxws21 -client *.xml