使用 RPC/编码的 Web 服务的最佳方式?更新

2022-09-01 05:26:01

我需要为后端使用老式的RPC /编码的WSDL Webservice。起初,我尝试使用Apache CXF和JAX-WS,但是JAX-WS工具并不吃rpc/enoded WSDL。wsimport

[错误] RPC/编码的 wsdls 在 JAXWS 2.0 中不受支持。

我也怀疑使用JAX-RPC来完成这项工作,因为它已经过时了。轴1.4是5年前的工具。

目前我看到这三个选项:

  1. 使用 JAX-WS 发送和接收 SOAP 并以某种方式对其进行解析,例如javax.xml.ws.Dispatch
  2. 使用JAX-RPC并因使用过时的技术而获得不良业力,
  3. 手动完成所有操作,以后再讨厌自己。

这些听起来都不太好,所以如果你能给出一些好的线索,想想该怎么做以及如何解决它,我将不胜感激。


答案 1

更新

我的情况通过手动编辑WSDL从编码文字解决了(基本上在操作输入和输出下是唯一的替代品),然后我可以使用Apache CXF生成存根。这是可以做到的,因为端点没有精确解析RPC/编码,并且RPC/编码的规范XML无法根据WSDL进行验证)。use="literal"

尽管Axis 1.4可能适合您,但将Apache CXF与那个小小的WSDL黑客一起使用可能是一种更好的方法。


[旧答案]

作为参考 -- 这次我选择使用 JAX-RPC 和 Axis 1.4。我生成了客户机代码,希望在服务升级时可以用 JAX-WS 实现替换它。


答案 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>

推荐