在本文中,您可以了解如何在 Internet 上安全地发送数据。在很多 B2B 应用程序中,社区合作伙伴通过简单对象访问协议(Simple Object Access Protocol,SOAP)和超文本传输协议(Hypertext Transfer Protocol,HTTP)使用标准的 Dun & Bradstreet (DUNS) ID、通信协议 Header 中的 Freeform ID 或文档本身中的 ID 来进行彼此间的通信。作者还给出了具体的 SOAP Header 示例来让您对其有个全面的了解。
在实际的 B2B 场景中,社区合作伙伴通过若干协议来进行事务处理,例如简单对象访问协议/超文本传输协议 (SOAP/HTTP)、Application System 2/超文本传输协议 (AS2/HTTP)、Java™ Message Service (JMS)、文件传输协议 (FTP) 和简单邮件传输协议 (SMTP),您可以使用各种标准机制(如 RosettaNet 文档、cXML 文档、形式良好的 XML 文档)或采用自定义格式的其他文档(如 Excel),来标识嵌入到业务文档本身中的上述每种类型或协议的通信合作伙伴。
在这种特殊方法中,社区合作伙伴通过 SOAP 和 HTTP 执行业务事务,为了标识这些合作伙伴,您需要考虑采用以下机制:
1. SOAP Header 中的合作伙伴 ID
2. 业务文档中的 ID
SOAP Header 中的合作伙伴 ID:客户端
为了将合作伙伴 ID 放入 SOAP Header 中,您需要使用 Java APIs for XML-Based Remote Procedure Call (JAX-RPC) 实现中的处理程序。既可以对客户机使用处理程序,也可以将其用在服务器端上。在客户端,使用处理程序可能会比较麻烦,因为客户机应用程序是独立的 Java 客户机。在此方法中,您必须在客户机存根中配置 RPC 处理程序,以便对 MessageContext 对象进行修改,使得在该处理程序中包含合作伙伴的 ID。javax.xml.rpc.handler.MessageContext 对象是从客户机的调用 API 接收的,必须将其强制转换为 com.ibm.ws.webservices.engine.MessageContext,以便获取 MessageContext 对象的 IBM 实现,此实现可提供用于访问 SOAP 消息的其他应用程序编程接口 (API)。
如果使用 WSDL2Java.bat 文件生成相应的 Java 文件,则将获得以下客户机存根内容,如下面的清单 1 中所示:
清单 1. 来自 WSDL2Java.bat 文件的存根
public AttachmentBindingStub(java.net.URL endpointURL,
javax.xml.rpc.Service service)
throws com.ibm.ws.webservices.engine.WebServicesFault
{
if (service == null) {
super.service = new com.ibm.ws.webservices.engine.client.Service();
}
else {
super.service = service;
}
java.util.List handlerInfos = new java.util.Vector();
super.engine =
((com.ibm.ws.webservices.engine.client.Service)super.service).getEngine();
initTypeMapping();
super.cachedEndpoint = endpointURL;
super.connection =
((com.ibm.ws.webservices.engine.client.Service)super.service).
getConnection(endpointURL);
super.messageContexts =
new com.ibm.ws.webservices.engine.MessageContext[4];
}
要配置客户端的处理程序,需要修改以下代码,如下面的清单 2 中所示:
清单 2. 配置客户端的处理程序
public AttachmentBindingStub(java.net.URL endpointURL,
javax.xml.rpc.Service service)
throws com.ibm.ws.webservices.engine.WebServicesFault
{
if (service == null) {
super.service = new com.ibm.ws.webservices.engine.client.Service();
}
else {
super.service = service;
}
java.util.List handlerInfos = new java.util.Vector();
javax.xml.namespace.QName[] headers = null;
javax.xml.rpc.handler.HandlerInfo handlerInfo =
new javax.xml.rpc.handler.HandlerInfo(
tip.attachment.NameValidatorHandler.class,
null, headers);
handlerInfos.add(handlerInfo);
service.getHandlerRegistry().setHandlerChain(
new javax.xml.namespace.QName("AttachmentTip"),
handlerInfos);
super.engine =
((com.ibm.ws.webservices.engine.client.Service) super.service).
getEngine();
initTypeMapping();
super.cachedEndpoint = endpointURL;
super.connection =
((com.ibm.ws.webservices.engine.client.Service)super.service).
getConnection(endpointURL);
super.messageContexts =
new com.ibm.ws.webservices.engine.MessageContext[4];
}
