使用SOAP标头注释Java对象

时间:2015-04-30 19:00:16

标签: java spring soap jaxb wsdl

我正在构建SOAP 1.1 Web服务的客户端。我正在使用spring WebServiceTemplate发送请求。

<bean class="org.springframework.ws.client.core.WebServiceTemplate">
    <qualifier value="v60WebServiceTemplate"/>
    <constructor-arg ref="ncctMessageFactory"/>
    <property name="messageSender">
        <bean class="org.springframework.ws.transport.http.HttpComponentsMessageSender">
            <property name="httpClient" ref="trustAllHttpClient" />
        </bean>
    </property>
    <property name="marshaller" ref="ncctV6Marshaller"/>
    <property name="unmarshaller" ref="ncctV6Marshaller"/>
</bean>

我正在使用jax2-maven-plugin从xsd生成带注释的java对象。我也有一个wsdl,但它没有在我的.xjb文件中配置。

<?xml version="1.0"?>
<jxb:bindings version="1.0" xmlns:jxb="http://java.sun.com/xml/ns/jaxb"
          xmlns:xjc="http://java.sun.com/xml/ns/jaxb/xjc"
          jxb:extensionBindingPrefixes="xjc" xmlns:xs="http://www.w3.org/2001/XMLSchema">
    <jxb:bindings schemaLocation="NCCT_v60.xsd" node="/xs:schema">
        <jxb:globalBindings>
            <xjc:simple/>
        </jxb:globalBindings>
    </jxb:bindings>
</jxb:bindings>

我发送它像这样的Spring Web服务模板类。我必须手动添加SOAPAction标头(我宁愿不这样做)。

private ServiceResponse makeNcctV6Request(ServiceRequest request, String uri, String soapAction) {
    request.setVersion(ncctServiceVersion);
    return (ServiceResponse) getWebServiceTemplate().marshalSendAndReceive(uri, request, createCallback(soapAction));
}

private SoapActionCallback createCallback(final String soapAction) {

    return new SoapActionCallback(soapAction) {
        public void doWithMessage(WebServiceMessage message) {
            SaajSoapMessage soapMessage = (SaajSoapMessage) message;
            MimeHeaders mimeHeaders = soapMessage.getSaajMessage().getMimeHeaders();
            mimeHeaders.setHeader("SOAPAction", soapAction);
        }
    };
}

当我调用此函数时,我必须在wsdl中对soap动作进行硬编码。有没有办法可以配置jaxb2-maven使用WSDL添加我可以使用的注释?或者我可以直接从WSDL获得这个的其他方式吗?

谢谢!

0 个答案:

没有答案