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