我需要为后端使用老式的RPC /编码WSDL Web服务。起初我尝试使用Apache CXF和JAX-WS,但是JAX-WS wsimport
工具不使用rpc / enoded WSDL。
[错误] JAXWS 2.0不支持rpc / encoded wsdls。
我也对使用JAX-RPC做这项工作表示怀疑,因为它已经过时了。 Axis 1.4是一款已有5年历史的工具。
目前我看到以下三个选项:
javax.xml.ws.Dispatch
发送和接收SOAP并以某种方式解析它,one example 这些都听起来不太好,所以如果你能提供一些好的线索,想要做什么以及如何解决它,我将不胜感激。
答案 0 :(得分:16)
我的案例是通过手工编辑从编码到文字的WSDL解决的(基本上在操作输入和输出use="literal"
是唯一的替代品)然后我可以使用 Apache CXF生成存根。可以这样做,因为端点没有完全解析RPC /编码,并且无法针对WSDL验证RPC /编码规范XML。
虽然Axis 1.4可能对你有用,但使用Apache CXF和那个小的WSDL hack可能是更好的方法。
供参考 - 我这次选择使用JAX-RPC和Axis 1.4。我生成了客户端代码,希望在服务升级时可以用JAX-WS实现替换它。
答案 1 :(得分:0)
万一有人希望(这里“ -like”不是正确的词;-)使用Axis 1.4,这是一个可以生成适当的类和Port接口的maven插件。
<build>
<plugins>
<plugin>
<groupId>org.codehaus.mojo</groupId>
<artifactId>axistools-maven-plugin</artifactId>
<version>1.4</version>
<executions>
<execution>
<id>generate-sources</id>
<phase>generate-sources</phase>
<goals>
<goal>wsdl2java</goal>
</goals>
<configuration>
<!-- Use your .wsdl location here-->
<sourceDirectory>${basedir}/src/main/resources/wsdl</sourceDirectory>
</configuration>
</execution>
</executions>
</plugin>
</plugins>
</build>
<!-- Here the libraries that you need to call the Axis WS client -->
<dependencies>
<dependency>
<groupId>org.apache.axis</groupId>
<artifactId>axis</artifactId>
<version>1.4</version>
</dependency>
<dependency>
<groupId>org.apache.axis</groupId>
<artifactId>axis-jaxrpc</artifactId>
<version>1.4</version>
</dependency>
<dependency>
<groupId>commons-logging</groupId>
<artifactId>commons-logging</artifactId>
<version>1.2</version>
</dependency>
<dependency>
<groupId>commons-discovery</groupId>
<artifactId>commons-discovery</artifactId>
<version>0.5</version>
</dependency>
<dependency>
<groupId>axis</groupId>
<artifactId>axis-wsdl4j</artifactId>
<version>1.5.1</version>
</dependency>
<dependency>
<groupId>org.apache.axis</groupId>
<artifactId>axis-saaj</artifactId>
<version>1.4</version>
</dependency>
<!-- activation+mail: To stop Axis generating WARNING about "Attachment support being disabled" -->
<dependency>
<groupId>javax.activation</groupId>
<artifactId>activation</artifactId>
<version>1.1.1</version>
</dependency>
<dependency>
<groupId>javax.mail</groupId>
<artifactId>mail</artifactId>
<version>1.4.7</version>
</dependency>
</dependencies>