使用 RPC/编码网络服务的最佳方式?
Posted
技术标签:
【中文标题】使用 RPC/编码网络服务的最佳方式?【英文标题】:Best way to consume RPC/encoded webservice? 【发布时间】:2011-11-09 04:37:30 【问题描述】:我需要为我的后端使用老式的 RPC/编码的 WSDL 网络服务。起初我尝试使用 Apache CXF 和 JAX-WS,但 JAX-WS wsimport
工具不吃 rpc/enoded WSDL。
[错误] JAXWS 2.0 不支持 rpc/编码的 wsdls。
我也对在这项工作中使用 JAX-RPC 表示怀疑,因为它已经过时了。 Axis 1.4 是 5 年前的工具。
目前我看到这三个选项:
-
使用 JAX-WS
javax.xml.ws.Dispatch
发送和接收 SOAP 并以某种方式解析它,one example
使用 JAX-RPC 并因使用过时的技术而受到恶报,
全部手动完成,以后讨厌自己。
这些听起来都不太好,所以如果你能提供一些好的线索,想想该怎么做以及如何解决它,我将不胜感激。
【问题讨论】:
这里有一篇关于这个主题的博客文章:Glen Maza'S blog 如果我理解你的描述,这是一个解决方案。 我以前看过那个链接。此解决方案包含使用静态 XML,这是选项 1。解决方案,但不是很优雅。 【参考方案1】:更新
我的情况是通过从 encoded 到 literal 手动编辑 WSDL 解决的(基本上在操作输入和输出 use="literal"
是唯一的替代品),然后我可以生成存根Apache CXF。可以这样做,因为端点没有准确地解析 RPC/encoded 并且 RPC/encoded spec XML 无法针对 WSDL 进行验证)。
虽然 Axis 1.4 可能对您有用,但使用 Apache CXF 和 WSDL hack 可能是更好的方法。
[旧答案]
作为参考——我这次选择使用 JAX-RPC 和 Axis 1.4。我生成了客户端代码,希望可以在服务升级时将其替换为 JAX-WS 实现。
【讨论】:
我确实下载了轴 1.4 但无法生成存根。您知道 wsdl2java 的文档在哪里吗?我在 apache 网站上尝试过,但没有发现任何有趣的东西。 如果您能够像我在第一篇文章 EDIT 部分中指出的那样编辑 WSDL,那么您最好使用 Apache CXF 等更新的工具。在使用 Axis 1.4 之前进行确认,因为如果可以的话,应该避免使用这些工具。【参考方案2】:如果有人想(好吧,“喜欢”在这里不是正确的词 ;-) 使用 Axis 1.4,这里有一个 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>
【讨论】:
以上是关于使用 RPC/编码网络服务的最佳方式?的主要内容,如果未能解决你的问题,请参考以下文章