最近在研究ProcessMaker,ProcessMaker 2.5版本是用php发布的webservice,所以需要采用java 的cxf调用php的webservice过程。 要了解Web Service,关键的是wsdl。 步骤一: http://blog.163.com/kangle0925@126/blog/static/27758198201363111718168) 1、先

最近在研究ProcessMaker,ProcessMaker 2.5版本是用php发布的webservice,所以需要采用java 的cxf调用php的webservice过程。

要了解Web Service,关键的是wsdl。

步骤一:http://blog.163.com/kangle0925@126/blog/static/27758198201363111718168)

1、先下载cxf包:http://cxf.apache.org/download.html,现在cxf包。

2、解压缩包,通过cmd命令进入到bin目录下

Java CXF调用PHP[其它语言]的Web Service-LMLPHP

3、使用wsdl2java命令生成客户端代码

在命令行执行wsdl2java -p com.winssage.demo.service -d d:\pmws -clientd:\pmws\wsdl2.xml (只需生成WebService客户端相关的代码即可)

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.

步骤二:修改cxf的bean配置文件(spring集成)

ProcessMakerServiceSoap:为从wsdl生成的webservice 接口类(interface),必须赋值予工厂类org.apache.cxf.jaxws.JaxWsProxyFactoryBean的serviceClass属性。

厂类org.apache.cxf.jaxws.JaxWsProxyFactoryBean的address属性:必须取自wsdl.xml文件中的service配置,如下

<service name="ProcessMakerService">

<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相关代码编译报错:

  1. //This constructor requires JAX-WS API 2.2. You will need to endorse the 2.2
  2. //API jar or re-run wsdl2java with "-frontend jaxws21" to generate JAX-WS 2.1
  3. //compliant code instead.
  4. public IcpBusinessService(WebServiceFeature ... features) {
  5. super(WSDL_LOCATION, SERVICE, features);
  6. }
  7. //This constructor requires JAX-WS API 2.2. You will need to endorse the 2.2
  8. //API jar or re-run wsdl2java with "-frontend jaxws21" to generate JAX-WS 2.1
  9. //compliant code instead.
  10. public IcpBusinessService(URL wsdlLocation, WebServiceFeature ... features) {
  11. super(wsdlLocation, SERVICE, features);
  12. }
  13. //This constructor requires JAX-WS API 2.2. You will need to endorse the 2.2
  14. //API jar or re-run wsdl2java with "-frontend jaxws21" to generate JAX-WS 2.1
  15. //compliant code instead.
  16. public IcpBusinessService(URL wsdlLocation, QName serviceName, WebServiceFeature ... features) {
  17. super(wsdlLocation, serviceName, features);
  18. } $

其不能正常编译通过是由于jax-ws2.2规约与java6冲突,执行命令:

wsdl2java -frontend jaxws21 -client *.xml

这样以jax-ws2.1生成的代码就可以在java6中编译通过并可执行。


登录后复制

09-01 15:58