用SOAP头注释Java对象

用SOAP头注释Java对象,java,spring,soap,jaxb,wsdl,Java,Spring,Soap,Jaxb,Wsdl,我正在为SOAP1.1WebService构建一个客户端。我正在使用SpringWebServiceTemplate发送请求 <bean class="org.springframework.ws.client.core.WebServiceTemplate"> <qualifier value="v60WebServiceTemplate"/> <constructor-arg ref="ncctMessageFactory"/> &

我正在为SOAP1.1WebService构建一个客户端。我正在使用SpringWebServiceTemplate发送请求

<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>
当我调用这个函数时,我必须硬编码soap操作,因为它就在wsdl中。有没有一种方法可以配置jaxb2 maven来使用WSDL添加我可以使用的注释?或者我可以通过其他方式直接从WSDL获取这些信息


谢谢

为什么要覆盖
SoapActionCallback
doWtithMessage
?您基本上是在重新实现现有功能。您可以创建它一次,然后简单地重用它,或者只是将它传递到您的方法中(new
SoapActionCallback(soapAction))
。在Spring WS中没有其他方法可以做到这一点。抱歉,我不理解您的建议。请您详细说明一下好吗?不可理解的是,您基本上是在覆盖默认实现。我想知道为什么。您只需要
新建SoapActionCallback(soapAction);
,然后就可以完成了。
<?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>
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);
        }
    };
}