我们有一个由API提供商提供的示例WSDL,我们希望与它集成。
我在https://spring.io/guides/gs/consuming-web-service/
和其他一些.wsdl文件中尝试了提供的示例,看起来都不错。
在我使用wsdl的情况下--当运行生成类的命令时--只生成了其中的一部分,而不是全部。
SoapUI中的情况并非如此-那里一切都很好。
知道为什么会这样吗
我的pom.xml如下所示
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
<plugin>
<groupId>org.jvnet.jaxb2.maven2</groupId>
<artifactId>maven-jaxb2-plugin</artifactId>
<version>0.13.2</version>
<executions>
<execution>
<goals>
<goal>generate</goal>
</goals>
</execution>
</executions>
<configuration>
<generatePackage>com.test.xxx.soapclient.generated</generatePackage>
<generateDirectory>${project.basedir}/src/main/java</generateDirectory>
<schemaDirectory>${project.basedir}/src/main/resources/wsdl</schemaDirectory>
<schemaIncludes>
<include>*.wsdl</include>
</schemaIncludes>
</configuration>
</plugin>
</plugins>
</build>
我所看到的是只有complex types
被创建为类,而其他的不是,在我的例子中,输入消息是下面的消息,没有为它生成类。
我该怎么做呢?这里有趣的是-soapAction
有空字符串作为参数-Java的API需要SoapAction Java代码
public Object callWebService(String action, Object request){
return getWebServiceTemplate().marshalSendAndReceive(request,new SoapActionCallback(action));
}
实际WSDL文件
<operation name="login" parameterOrder="user password">
<input message="tns:CardManagementEP_login"> </input>
<output message="tns:CardManagementEP_loginResponse"> </output>
</operation>
<message name="CardManagementEP_loginResponse">
<part name="result" type="xsd:string"> </part>
</message>
<message name="CardManagementEP_login">
<part name="user" type="xsd:string"> </part>
<part name="password" type="xsd:string"> </part>
</message>
<operation name="login">
<soap:operation soapAction=""/>
<input>
<soap:body use="literal" namespace="http://com.tch.cards.service"/>
</input>
<output>
<soap:body use="literal" namespace="http://com.tch.cards.service"/>
</output>
</operation>
1条答案
按热度按时间umuewwlo1#
我设法解决了这个问题的帮助下,达肖恩卡特从显示 Spring 办公时间。
问题是上面提到的WSDL文件太旧了,因此没有生成不复杂的请求/响应类。
我们所做的是修改现有的WSDL并将这些内容创建为复杂类型--这样Jaxb将为它们生成类
example-wsdl.wsdl
在那之后,类被生成了,但是它们对我不起作用,我不得不做一些手工修改来使它们起作用
LoginResponse.java
Login
另外,在我的例子中,Soap Action并不重要,我传递的是空字符串。
实际调用发生的代码如下所示:
重要说明:根据每个用例更改名称空间-这非常重要