当我有 ClientTransportException 时如何在 SOAP 响应中获取正文

问题描述 投票:0回答:1

在 SoapUI/Postman 中我发送这个请求 请注意我是如何获得 401 Unauthorized 的,但我得到的是响应主体。预计会出现 401。
现在我正在尝试使用 jax-ws 发送此消息。我用处理程序拦截消息响应。 我的处理程序看起来像这样:

public class SHandler implements SOAPHandler<SOAPMessageContext> {
    @Override
    public Set<QName> getHeaders() {
        System.out.println(">>>>>>>>>>> GetHeaders");
        return null;
    }

    @Override
    public boolean handleMessage(SOAPMessageContext soapMessageContext) {
        boolean isRequest = (Boolean) soapMessageContext.get(MessageContext.MESSAGE_OUTBOUND_PROPERTY);
        if (!isRequest) {
            try {
                System.out.println(soapMessageContext.getMessage().getSOAPBody().getValue(););
            } catch (SOAPException e) {
                e.printStackTrace();
            }
        }
        System.out.println(">>>>>>>>> Message");
        return true;
    }

    @Override
    public boolean handleFault(SOAPMessageContext soapMessageContext) {
        try {
            System.out.println(soapMessageContext.getMessage().getSOAPBody().getValue());
        } catch (SOAPException e) {
            e.printStackTrace();
        }
        System.out.println(">>>>>>>>>>> HandleFault");
        return true;
    }

    @Override
    public void close(MessageContext messageContext) {
        System.out.println(">>>>>>>>>>> Close");
    }
}

我希望从请求中得到一个返回值,但我得到的是空值。我只在控制台中看到此响应:

com.sun.xml.ws.client.ClientTransportException: The server sent HTTP status code 401: Unauthorized
我如何获得邮递员请求中显示的正文?



一些更多的上下文信息:
向模糊端点发出请求的 jax-ws 服务

@WebServiceClient(
        name = "LIReceiveMessageService",
        targetNamespace = "http://uic.cc.org/UICMessage",
        wsdlLocation = "src/main/java/nl/rls/ci/soapinterface/UICCCMessageProcessingInboundWS.wsdl"
)
public class LIReceiveMessageService
        extends Service {
    ....
}

我使用 this oracle 指南添加的 messageResolver。

LIReceiveMessageService service = new LIReceiveMessageService();
service.setHandlerResolver(new MyHandlerResolver());
java soap jax-ws
1个回答
0
投票

在 handlemessage 方法中,您可以添加以下内容

ByteArrayOutputStream stream = new ByteArrayOutputStream(); message.writeTo(stream); String messageBody = new String(stream.toByteArray());

© www.soinside.com 2019 - 2024. All rights reserved.