用SOAP头注释Java对象
我正在为SOAP1.1WebService构建一个客户端。我正在使用SpringWebServiceTemplate发送请求用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"/> &
<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
?您基本上是在重新实现现有功能。您可以创建它一次,然后简单地重用它,或者只是将它传递到您的方法中(newSoapActionCallback(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);
}
};
}