gpt4 book ai didi

java - 是否有保证在自定义 SOAP 处理程序中获取操作名称的方法?

转载 作者:塔克拉玛干 更新时间:2023-11-03 04:16:00 25 4
gpt4 key购买 nike

我有一个用于传入消息的自定义 SOAP 消息处理程序,它将根据调用的操作运行不同的代码。我第一次尝试获取操作名称看起来像这样:

public boolean handleMessage(SOAPMessageContext context)
{
String op = context.get(MessageContext.WSDL_OPERATION);
...

这失败了,因为属性 MessageContext.WSDL_OPERATION 似乎从未被设置。然后我尝试使用这个:

public boolean handleMessage(SOAPMessageContext context)
{
Map<?, ?> headers = (Map<?, ?>)context.get(MessageContext.HTTP_REQUEST_HEADERS);
ArrayList<String> SOAPAction = ((ArrayList<String>) headers.get("SOAPAction"));
String opName = SOAPAction.get(0);
//opName will be formatted like "urn#myOperation", so the prefix must be removed
opName = ((opName.replace("\"","").split("#"))[1]);

这行得通,但我担心标题属性“SOAPAction”未设置(或什至不存在)或没有我期望的值的情况。我也有点担心,因为我不知道这是否是获取操作名称的“官方”方式 - 我通过查看调试器中 context 的内容弄明白了。

在处理传入的 SOAP 消息时,有没有更好的方法来获取操作名称?

最佳答案

您可以调用 body.getElementName().getLocalName() 来检索消息负载的 SOAP 正文元素的名称。它有点冗长和手动,但它有效。您可以在处理程序中包含以下内容

if ((boolean) context.get(MessageContext.MESSAGE_INBOUND_PROPERTY){ //for requests only
SOAPEnvelope msg = context.getMessage().getSOAPPart().getEnvelope(); //get the SOAP Message envelope
SOAPBody body = msg.getBody();
String operationName = body.getChildNodes().item(1).getLocalName();
}

上述代码的结果保证携带您的 WSDL 中指定的操作名称

编辑:此解决方案仅基于将 Web 服务实现为文档/文字包装或 RPC/文字的条件

关于java - 是否有保证在自定义 SOAP 处理程序中获取操作名称的方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13535277/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com