Java 使用WS-Security对SOAP消息进行签名

Java 使用WS-Security对SOAP消息进行签名,java,soap,ws-security,wsimport,Java,Soap,Ws Security,Wsimport,我需要使用一个SOAPAPI,它请求所有消息都被签名为策略“SIGNONLY” 我已经使用wsimport从WSDL生成了客户机代码,我希望它也能生成用于签名的代码,但事实并非如此 MyWebservice=newmywebservice(); MyWebservicePortType端口=服务。getMyWebserviceSOAPportHttp(); //构建请求 ObjectFactory ObjectFactory=新的ObjectFactory(); MyRequest=object

我需要使用一个SOAPAPI,它请求所有消息都被签名为策略“SIGNONLY”

我已经使用
wsimport
从WSDL生成了客户机代码,我希望它也能生成用于签名的代码,但事实并非如此

MyWebservice=newmywebservice();
MyWebservicePortType端口=服务。getMyWebserviceSOAPportHttp();
//构建请求
ObjectFactory ObjectFactory=新的ObjectFactory();
MyRequest=objectFactory.createMyRequest();
//呼叫端点
port.myRemoteMethod(请求);

wsimport
工具是否有一个额外的开关来生成用于签名的代码,或者我在客户端代码中遗漏了一些步骤?

WS-Security是soap的扩展,因此我认为wsimport无法在代码生成中处理它。 无论如何,您可以编写处理程序在soap请求中添加ws-security头。 您可以通过以下方式向端口添加处理程序:

BindingProvider bp = (BindingProvider) port;
List<Handler> handlerChain = new ArrayList<Handler>();
handlerChain.add( new MyHandler() );
Binding binding = bp.getBinding();
binding.setHandlerChain(handlerChain);

WS-Security是soap的扩展,所以我认为wsimport无法在代码生成中处理它。 无论如何,您可以编写处理程序在soap请求中添加ws-security头。 您可以通过以下方式向端口添加处理程序:

BindingProvider bp = (BindingProvider) port;
List<Handler> handlerChain = new ArrayList<Handler>();
handlerChain.add( new MyHandler() );
Binding binding = bp.getBinding();
binding.setHandlerChain(handlerChain);