我遇到了类似的问题,这对我有用.我已经使用wsimport生成了sei.
如果标头是wsdl的一部分,则可以使用-XadditionalHeaders生成接受标头的SEI.
如果不是,则必须使用SOAPHandler以编程方式添加标头.这很简单!
如下更改方法,handleMessage
public boolean handleMessage(SOAPMessageContext smc) {
Boolean outboundProperty = (Boolean) smc.get(MessageContext.MESSAGE_OUTBOUND_PROPERTY);
if (outboundProperty.booleanValue()) {
SOAPMessage message = smc.getMessage();
try {
SOAPFactory soapFactory = SOAPFactory.newInstance();
SOAPEnvelope envelope = smc.getMessage().getSOAPPart().getEnvelope();
SOAPHeader header = envelope.addHeader();
SOAPHeaderElement se=header.addHeaderElement(new QName("http://schemas.microsoft.com/ws/2005/05/addressing/none", "Action"));
//se.setMustUnderstand(true); //Ideal way to set if webservice supports
se.addTextNode("some text");
se.addAttribute(soapFactory.createName("S:mustUnderstand"),"1"); //S: or s: depending on xmlns
} catch (Exception e) {
e.printStackTrace();
}
} else {
try {
SOAPMessage message = smc.getMessage();
message.writeTo(System.out);
System.out.println("");
} catch (Exception ex) {
ex.printStackTrace();
}
}
return true;
}
//附加处理程序的代码.
Service1 service1 = new Service1();
IService1 iService1 = service1.getBasicHttpBindingIService1();
BindingProvider bindingProvider = (BindingProvider) iService1;
final Binding binding = bindingProvider.getBinding();
List handlerList = binding.getHandlerChain();
if (handlerList == null) {
handlerList = new ArrayList();
}
handlerList.add(new HeaderHandler());
binding.setHandlerChain(handlerList);
ServiceResponse serviceResponse = iService1.callServiceMethod1(serviceRequest);