我正在尝试为具有此 WSDL 的 KashFlow 编写一个 SOAP 客户端:
https://securedwebapp.com/api/service.asmx
它使用soapenc,所以我不能像我喜欢的那样使用JAXB(和wsimport),所以需要使用JAX-RPC。我已经设法使用 wscompile 以及 Eclipse Apache Axis 插件创建了 Java 类。
我正在使用 Spring 和 JaxRpcPortProxyFactoryBean
<bean id="kashflowWebService" class="org.springframework.remoting.jaxrpc.JaxRpcPortProxyFactoryBean">
<property name="serviceInterface" value="kashflow.axisapi.KashFlowAPI"/>
<property name="wsdlDocumentUrl" value="https://securedwebapp.com/api/service.asmx?WSDL"/>
<property name="namespaceUri" value="KashFlow"/>
<property name="serviceName" value="KashFlowAPI"/>
<property name="portName" value="KashFlowAPISoap"/>
</bean>
在某种程度上,这一切似乎都很好,它正在寻找服务和端口。我有一个 GetCurrencies 操作的请求,这是一个只需要用户名和密码的简单操作。但这会返回以下错误:
Caused by: port: {KashFlow}KashFlowAPISoap does not contain operation: getCurrencies
该操作在那里,但称为“GetCurrencies”。在生成的类中,嵌入的字符串文字似乎都以大写开头,那么为什么错误提到以小写开头的操作呢?与期望 WSDL 匹配 Java 方法命名约定有关吗?
据我了解,该操作区分大小写,如果您正在为 Java 消费制作 WSDL,您的操作将以小写开头,但我认为该服务是为 .NET 编写的,它们为 C#、PHP 等提供示例但Java没有。
我尝试了两组不同的生成代码(wscompile 和 Axis wsdl2java),并将尝试将 Spring JAX-RPC 更改为其他方法,看看是否有帮助。
如何强制它使用我提供的 WSDL 中定义的操作专有名称?