在处理程序(此处的处理程序是 tip.attachment.NameValidatorHandler)的 handleRequest 方法中,您需要将 MessageContext 修改为包含发送合作伙伴的 ID 和接收合作伙伴的 ID,如下面的清单 3 中所示:
清单 3. handleRequest 方法
public boolean handleRequest(javax.xml.rpc.handler.MessageContext ctx)
{
try{
com.ibm.ws.webservices.engine.MessageContext soapMessageContext =
(com.ibm.ws.webservices.engine.MessageContext)ctx;
SOAPMessage sm = soapMessageContext.getMessage();
SOAPHeader soapHeader = sm.getSOAPPart().getEnvelope().getHeader();
javax.xml.soap.Name name = sm.getSOAPPart().getEnvelope().
createName("sender-id","b2b","http://ibm.com/b2b");
soapHeader.addHeaderElement(name).addTextNode("b2b");;
name = sm.getSOAPPart().getEnvelope().
createName("receiver-id","b2c","http://ibm.com/b2c");
soapHeader.addHeaderElement(name).addTextNode("b2c");
// variable for soap body
SOAPBody sb = null;
// get soap body from soap message
sb = sm.getSOAPPart().getEnvelope().getBody();
}catch(Exception ex){
ex.printStackTrace();
}
return true;
}
服务器端代码处理
当将合作伙伴 ID 放入到服务器端的 SOAP Header 中时,需要通过一个标准方法来在 webservices.xml 文件中配置该处理程序。进行此工作时,webservices.xml 文件将与下面的清单 4 类似:
清单 4. 将 ID 放入到 SOAP Header 中
<port-component>
<port-component-name>AttachmentTip
</port-component-name>
<wsdl-port xmlns:pfx=
"urn:attachment.tip">pfx:AttachmentTip</wsdl-port>
<service-endpoint-interface>tip.attachment.AttachmentTip
</service-endpoint-interface>
<service-impl-bean>
<servlet-link>AttachmentTip</servlet-link>
</service-impl-bean>
<handler>
<handler-name>NameValidatorHandler</handler-name>
<handler-class>tip.attachment.NameValidatorHandler
</handler-class>
</handler>
</port-component>
然后,您需要在 RPC 处理程序的服务器端访问此 SOAP 消息,以提取 SOAP Header 来标识合作伙伴的 ID。在服务器端处理程序中,必须将这些合作伙伴 ID 存储在外部存储中,并通过从此处读取合作伙伴 ID 来使用附件。
