我正在构建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获得这个的其他方式吗?
谢谢!