Web服务HTTP标头

时间:2017-05-16 11:48:32

标签: java web-services soap http-headers authorization

我在向我的网络服务请求添加HTTP自定义标头时遇到问题。我需要一个名为" Authorization"并且具有恒定值" Bearer token_id"但我无法弄清楚如何做到这一点。

使用SoapUI我可以通过按"添加自定义HTTP标头"来添加它。按钮,它工作得很好,但现在我需要在我的自定义类中实现它。

这是我需要添加标题的部分:

        try {
            //SERVICE
            Service service = new Service();
            Call call = (Call) service.createCall();    
            call.setTargetEndpointAddress(new java.net.URL(endPointURL));
            call.setSOAPActionURI(soapActionURI);

                /*
                MessageContext msgContext= call.getMessageContext();
                MimeHeaders hd = msgContext.getMessage().getMimeHeaders();
                hd.addHeader("Authorization", "Bearer token_id");
                */


             System.out.println("Authorization WS");

            //INVOKE
            SOAPEnvelope response = (SOAPEnvelope) call.invoke(new Message(soap.asXML()));
            Document doc = new DOMReader().read(response.getAsDocument());          
            return doc;

        }

以下是控制台输出:

Authorization WS
AxisFault
 faultCode: {http://xml.apache.org/axis/}HTTP
 faultSubcode: 
 faultString: (401)Unauthorized
 faultActor: 
 faultNode: 
 faultDetail: 
    {}:return code:  401
<soapenv:Fault xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/"><faultcode xmlns:axis2ns18="http://schemas.xmlsoap.org/soap/envelope/">axis2ns18:Client</faultcode><faultstring>Authentication Failure</faultstring><detail>Required OAuth credentials not provided</detail></soapenv:Fault>
    {http://xml.apache.org/axis/}HttpErrorCode:401

(401)Unauthorized

如果我执行评论的部分,我会在java.lang.NullPointerException行出现MimeHeaders hd = msgContext.getMessage().getMimeHeaders();错误

2 个答案:

答案 0 :(得分:0)

如何先设置信息?类似的东西:

MessageContext msgContext= call.getMessageContext();
msgContext.setMessage(new Message(soap.asXML()));
MimeHeaders hd = msgContext.getMessage().getMimeHeaders();
hd.addHeader("Authorization", "Bearer token_id");

因为您必须在标题之前设置消息。

答案 1 :(得分:0)

您可以尝试这种解决方法:

  1. 使用Postman发出SOAP请求。
  2. 输入wsdl并单击“标题”选项卡。
  3. 输入标题,包括标题下的“授权” “键。”在“值”下输入“承载”,然后粘贴您的令牌ID。
  4. 发出请求(我认为它是SOAP的POST)。
  5. 如果成功,您可以点击Postman中的“代码”按钮 将以您选择的语言在您的请求中显示标题。