如何在 java 的网络服务调用中添加或操作 http header
How to add or manipulate http header in a webservice call in java
需要在 soap 请求中添加新的 http header 键值对。如下所示。
HTTP/1.1 200 OK
Cache-Control: no-cache
Pragma: no-cache
Content-Type: text/xml; charset=utf-8
New-Key: Some dynamic value
<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/">
<soapenv:Body>
如何在发出 soap 请求时在 http header 中添加新的键值对(New-Key:一些动态值)?服务器稍后将从 http header 中提取值。作为一项要求,既不应在 soap header 中也不应在 soap body.
中添加新字段
我们正在使用 IBM wsdl2java 工具,它实现了 IBM JAX-RPC 规范来生成 Java 客户端并调用 SOAP 网络服务调用。
public class MyApplicationClass {
// Inject an instance of the service's port-type.
@WebServiceRef(EchoService.class)
private EchoPortType port;
// This method will invoke the web service operation and send and receive transport headers.
public void invokeService() {
// Set up the Map that will contain the request headers.
Map<String, Object>requestHeaders = new HashMap<String, Object>();
requestHeaders.put(“Cookie”, “ClientAuthenticationToken=FFEEBBCC”);
requestHeaders.put(“MyHeaderFlag”, new Boolean(true));
// Set the Map as a property on the RequestContext.
BindingProvider bp = (BindingProvider) port;
bp.getRequestContext().put(com.ibm.websphere.webservices.Constants.REQUEST_TRANSPORT_PROPERTIES, requestHeaders);
// Set up the Map to retrieve transport headers from the response message.
Map<String, Object>responseHeaders = new HashMap<String, Object>();
responseHeaders.put(“Set-Cookie”, null);
responseHeaders.put(“MyHeaderFlag, null);
// Invoke the web services operation.
String result = port.echoString(“Hello, world!”);
// Retrieve the headers from the response.
String cookieValue = responseHeaders.get(“Set-Cookie”);
String headerFlag = responseHeaders.get(“MyHeaderFlag”);
}
}
需要在 soap 请求中添加新的 http header 键值对。如下所示。
HTTP/1.1 200 OK
Cache-Control: no-cache
Pragma: no-cache
Content-Type: text/xml; charset=utf-8
New-Key: Some dynamic value
<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/">
<soapenv:Body>
如何在发出 soap 请求时在 http header 中添加新的键值对(New-Key:一些动态值)?服务器稍后将从 http header 中提取值。作为一项要求,既不应在 soap header 中也不应在 soap body.
中添加新字段我们正在使用 IBM wsdl2java 工具,它实现了 IBM JAX-RPC 规范来生成 Java 客户端并调用 SOAP 网络服务调用。
public class MyApplicationClass {
// Inject an instance of the service's port-type.
@WebServiceRef(EchoService.class)
private EchoPortType port;
// This method will invoke the web service operation and send and receive transport headers.
public void invokeService() {
// Set up the Map that will contain the request headers.
Map<String, Object>requestHeaders = new HashMap<String, Object>();
requestHeaders.put(“Cookie”, “ClientAuthenticationToken=FFEEBBCC”);
requestHeaders.put(“MyHeaderFlag”, new Boolean(true));
// Set the Map as a property on the RequestContext.
BindingProvider bp = (BindingProvider) port;
bp.getRequestContext().put(com.ibm.websphere.webservices.Constants.REQUEST_TRANSPORT_PROPERTIES, requestHeaders);
// Set up the Map to retrieve transport headers from the response message.
Map<String, Object>responseHeaders = new HashMap<String, Object>();
responseHeaders.put(“Set-Cookie”, null);
responseHeaders.put(“MyHeaderFlag, null);
// Invoke the web services operation.
String result = port.echoString(“Hello, world!”);
// Retrieve the headers from the response.
String cookieValue = responseHeaders.get(“Set-Cookie”);
String headerFlag = responseHeaders.get(“MyHeaderFlag”);
}
}