将路径+参数添加到响应字段

时间:2015-05-07 15:41:50

标签: java apache web-services

我正在使用Java和Glassfish作为服务器来创建Web服务。

我也在使用Apache Server处理HTTP请求,即当我发出请求时,我能够获得标准信息,例如:

HTTP/1.1 200 OK[\r][\n]
Server: GlassFish Server Open Source Edition  4.1 [\r][\n]"
X-Powered-By: Servlet/3.1 JSP/2.3 (GlassFish Server Open Source Edition  4.1  Java/Oracle Corporation/1.8)[\r][\n]
Set-Cookie: JSESSIONID=efc5aa919b55321d3aeaf2c9b3b6; Path=/context; HttpOnly[\r][\n]
Content-Type: text/xml; charset=utf-8[\r][\n]
Date: Thu, 07 May 2015 15:26:40 GMT[\r][\n]
Transfer-Encoding: chunked[\r][\n]
WWW-Authenticate: Basic realm="file"[\r][\n]
Content-Language: [\r][\n]
Content-Type: text/html[\r][\n]
Content-Length: 1090[\r][\n]
SOAPAction: ""[\r][\n]
Host: localhost:8080[\r][\n]
Connection: Keep-Alive[\r][\n]
User-Agent: Apache-HttpClient/4.1.1 (java 1.5)[\r][\n]

我开发的Web操作的一个示例是:

@WebMethod(operationName = "someoperation")
@Produces(MediaType.APPLICATION_XML)
    public void makeHappen(@WebParam(name = "req") Object obj,
       @WebParam(name = "resp", mode = WebParam.Mode.OUT) Holder<String> response) {

To List of information that I get, I want to add own specifications, like:


--> OperationName: someOperation
    HTTP/1.1 200 OK[\r][\n]
    Server: GlassFish Server Open Source Edition  4.1 [\r][\n]"
    X-Powered-By: Servlet/3.1 JSP/2.3 (GlassFish Server Open Source Edition  4.1  Java/Oracle Corporation/1.8)[\r][\n]
    Set-Cookie: JSESSIONID=efc5aa919b55321d3aeaf2c9b3b6; Path=/context; HttpOnly[\r][\n]
    Content-Type: text/xml; charset=utf-8[\r][\n]
    Date: Thu, 07 May 2015 15:26:40 GMT[\r][\n]
    Transfer-Encoding: chunked[\r][\n]
    WWW-Authenticate: Basic realm="file"[\r][\n]
    Content-Language: [\r][\n]
    Content-Type: text/html[\r][\n]
    Content-Length: 1090[\r][\n]
    SOAPAction: ""[\r][\n]
    Host: localhost:8080[\r][\n]
    Connection: Keep-Alive[\r][\n]
    User-Agent: Apache-HttpClient/4.1.1 (java 1.5)[\r][\n]

1 个答案:

答案 0 :(得分:1)

  • 对于WebSphere Application Server:

请参阅Sending transport headers with JAX-WS

中的文档和示例
  

这是一个简短的编程示例,说明了如何请求   传输头由JAX-WS Web服务客户端发送   应用程序:

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 transport headers on the request.
    public void invokeService() {

        // Set up the Map that will contain the request headers.
        Map<String, Object> requestHeaders = new HashMap<String, Object>();
        requestHeaders.put(“MyHeader1”, “This is a string value”);
        requestHeaders.put(“MyHeader2”, new Integer(33));
        requestHeaders.put(“MyHeader3”, 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);

        // Invoke the web services operation.
        String result = port.echoString(“Hello, world!”);
    }
}
  

这是一个简短的编程示例,说明了如何响应   传输头由JAX-WS Web服务端点发送   实施类:

@WebService
public class EchoServiceImpl implements EchoServicePortType {

    // Inject an instance of WebServiceContext so we can retrieve
    // the MessageContext for each invocation of this endpoint.
    @Resource
    WebServiceContext ctxt;

    /**
     * Default constructor.
     */
    public EchoServiceImpl() {
        ....
    }

    public String echoString(String input) {
        String result = “Echo result: “ + input;

        // Retrieve the MessageContext from the injected WebServiceContext.
        MessageContext mc = ctxt.getMessageContext();

        // Send some headers back in the response message.
        Map<String, Object> responseHeaders = new HashMap<String, Object>();
        responseHeaders.put("MyHeader1", "This is a string response value");
        responseHeaders.put("MyHeader2", new Integer(33));
        responseHeaders.put("MyHeader3”, new Boolean(false));

        // Set the response header Map on the MessageContext.
        mc.put(com.ibm.websphere.webservices.Constants.RESPONSE_TRANSPORT_PROPERTIES, responseHeaders);

        return result;
    }
}
  • 对于GlassFish Application Server:

您可以从javax.xml.ws.WebServiceContext获取javax.xml.ws.handler.MessageContext。然后添加到MessageContext标题中,如下所示:

...
Map<String, List<String>> headers = new HashMap<String, List<String>>();
headers.put("OperationName", someOperation);
messageContext.put(MessageContext.HTTP_REQUEST_HEADERS, headers)
...

此外,您可以尝试使用此方法将HTTP标头附加到请求:

...
Dispatch<SOAPMessage> dispatch =  
 service.createDispatch(portName, SOAPMessage.class, Service.Mode.MESSAGE);    
Map<String, List<String>> headers = 
      new HashMap<String, List<String>>();
headers.put("OperationName", someOperation);    
dispatch.getRequestContext().put(MessageContext.HTTP_REQUEST_HEADERS,
  headers);
...

另见: