gpt4 book ai didi

spring - 使用 spring webservice 模板的原始 xml 响应

转载 作者:行者123 更新时间:2023-12-04 19:09:09 26 4
gpt4 key购买 nike

我正在编写一个客户端来使用 webserviceTemplate (spring-ws) 调用 SOAP webservice。我正在使用 JAXB 将 wsdl 转换为 POJO。我将请求作为 POJO 发送到 web 服务,但是想要 xml 格式的响应(原始 xml 而不是未编码的 pojo 格式)。

wsTemplate.marshalSendAndReceive(requestPayload) 会给我未编码的 pojo 对象作为输出,但是我需要原始 xml 来响应 webservice 调用。

还有一个查询,如果我将响应作为原始 xml,我是否还需要将 marshaller bean 定义为:






<bean id="messageFactory" class="org.springframework.ws.soap.saaj.SaajSoapMessageFactory"/>

<bean id="marshaller" class="org.springframework.oxm.jaxb.Jaxb2Marshaller">
<property name="contextPath" value="com.abc.xyz" />
</bean>

(当我定义这个编码器时,我得到的错误是 无法将类型“com.abc.xyz.GetAbc”编码为元素,因为它缺少 @XmlRootElement 注释] )

任何帮助。

最佳答案

也许对您来说为时已晚,但是将 POJO 编码回 XML 可以使用

final Result marshallerResult = new StringResult();
marshaller.marshal(input, marshallerResult);

哪里 marshaller是您在 wsTemplate 中使用的那个.

<bean id="marshaller" class="org.springframework.oxm.jaxb.Jaxb2Marshaller">
<property name="contextPath" value="com.dhl.dctservice" />
</bean>

<bean id="webServiceTemplate" class="org.springframework.ws.client.core.WebServiceTemplate">
<property name="marshaller" ref="marshaller" />
<property name="unmarshaller" ref="marshaller" />
</bean>
StringResult来自 org.springframework.xml.transform包裹。

要从 WSDL 生成 POJO,我正在使用 maven 插件

<!-- WSDL -> Java (start) -->
<plugin>
<!-- !!! READ !!! -->
<!-- mvn cxf-codegen-plugin:wsdl2java NOT working, comment phase and
run "mvn clean install -DskipTests") -->
<groupId>org.apache.cxf</groupId>
<artifactId>cxf-codegen-plugin</artifactId>
<version>${cxf-codegen-plugin.version}</version>
<executions>
<execution>
<id>wsdl2java</id>
<!-- comment this to generate java classes from wsdl during the "mvn
clean install -DskipTests" -->
<phase>manual-generate-sources</phase>
<configuration>
<wsdlOptions>
<wsdlOption>
<wsdl>${basedir}/src/main/resources/wsdl/service.wsdl</wsdl>
<extraargs>
<extraarg>-verbose</extraarg>
<extraarg>-b</extraarg>
<extraarg>${basedir}/src/main/resources/wsdl/bindings.xml</extraarg>
<extraarg>-client</extraarg>
<extraarg>-xjc-Xts</extraarg>
</extraargs>
</wsdlOption>
</wsdlOptions>
</configuration>
<goals>
<goal>wsdl2java</goal>
</goals>
</execution>
</executions>
<dependencies>
<dependency>
<groupId>org.codehaus.woodstox</groupId>
<artifactId>stax2-api</artifactId>
<version>3.1.1</version>
</dependency>
<dependency>
<groupId>org.apache.cxf</groupId>
<artifactId>cxf-xjc-ts</artifactId>
<version>2.2.12</version>
</dependency>
<dependency>
<groupId>org.jvnet.jaxb2_commons</groupId>
<artifactId>jaxb2-basics-jaxb-xjc</artifactId>
<version>2.1.13</version>
</dependency>
</dependencies>
</plugin>
<!-- WSDL -> Java (end) -->

哪里 binding.xml文件是

<jaxb:bindings
version="2.1"
xmlns:jaxb="http://java.sun.com/xml/ns/jaxb"
xmlns:xjc="http://java.sun.com/xml/ns/jaxb/xjc"
xmlns:xs="http://www.w3.org/2001/XMLSchema">

<jaxb:globalBindings generateElementProperty="false">
<xjc:simple />
</jaxb:globalBindings>

</jaxb:bindings>

关于spring - 使用 spring webservice 模板的原始 xml 响应,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17195682/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com