1

我正在尝试为具有此 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 中定义的操作专有名称?

4

0 回答 0