使用 JAX-WS 发送隐式 SOAP 头
可以使现有的 Java™ API for XML-Based Web Services (JAX-WS) Web Service 客户机在隐式 SOAP 头中发送值。通过修改客户机代码来发送隐式 SOAP 头,可以在出局 web service 请求中发送特定信息。
开始之前
要完成本任务,需要可以用来发送隐式 SOAP 头的 Web service 客户机。
隐式
SOAP 头是符合下列其中一种描述的 SOAP 头:
- 在 Web 服务描述语言 (WSDL) 文件的绑定中声明为 SOAP 头的消息部件,但消息定义未由 WSDL 文件中的 portType 元素引用。
- 未包含在 WSDL 文件中的元素。
处理程序和服务端点可以通过使用带附件的 SOAP API for Java (SAAJ) 数据模型来处理隐式或显式 SOAP 头。
使用 JAX-WS 时,对于可以操作的头类型没有限制。
关于此任务
客户机应用程序对 Dispatch 或 Proxy 对象设置属性以发送和接收隐式 SOAP 头。
过程
结果
具有已配置为发送隐式 SOAP 头的 JAX-WS Web Service 客户机。
示例
以下编程示例说明如何在 JAX-WS Web Service 请求和响应上下文中设置两个请求 SOAP 头和接收一个响应 SOAP 头:
1 //Create the hashmaps for the outbound soap headers
2 Map<QName, List<String>> outboundHeaders=new HashMap<QName, List<String>>();
3 4 //Add "AtmUuid1" and "AtmUuid2" to the outbound map
5 List<String> list1 = new ArrayList<String>();
6 list1.add("<AtmUuid1 xmlns=\"com.rotbank.security\"><uuid>ROTB-0A01254385FCA09</uuid></AtmUuid1>");
7 List<String> list2 = new ArrayList<String>();
8 list2.add("<AtmUuid2 xmlns=\"com.rotbank.security\"><uuid>ROTB-0A01254385FCA09</uuid></AtmUuid2>"
9 outboundHeaders.put(new QName("com.rotbank.security", "AtmUuid1"), list1);
10 outboundHeaders.put(new QName("com.rotbank.security", "AtmUuid2"), list2);
11 // Set the outbound map on the request context
12 dispatch.getRequestContext().put("jaxws.binding.soap.headers.outbound");
13 // Invoke the remote operation
14 dispatch.invoke(parm1);
15 // Get the inbound header map from the response context
16 Map<QName,List<String>> inboundMap = dispatch.getResponseContext().get("jaxws.binding.soap.headers.outbound");
17 List<String> serverUuidList = inboundMap.get(new QName("com.rotbank.security","ServerUuid"));
18 String text = serverUiidList.get(0);
19 //Note: text now equals a XML object that contains a SOAP header:
21//"<y:ServerUuid xmlns:y=\"com.rotbank.security\"><:uuid>ROTB-0A03519322FSA01
22 </y:uuid></y:ServerUuid.");
在第 2 行上,创建出站 SOAP 头映射。
在第 5 行到第 10 行上,将 AtmUuid1 和 AtmUuid2 头元素添加到出站映射。
在第 12 行上,对请求上下文设置出站映射,这会导致在调用操作时将 AtmUuid1 和 AtmUuid2 头添加到请求消息。
在第 14 行上,调用远程操作。
在第 15 行上,获取出站头映射。
在第 17 行到第 18 行上,从响应映射中检索 ServerUuid 头。此映射会访问响应消息中的 SOAP 头。