gpt4 book ai didi

java - 更改使用 JAXWS 生成的默认 XML 命名空间前缀

转载 作者:搜寻专家 更新时间:2023-10-30 19:40:09 24 4
gpt4 key购买 nike

我正在使用 JAXWS 为我们正在构建的 Java 应用程序生成 WebService 客户端。

当 JAXWS 构建其 XML 以在 SOAP 协议(protocol)中使用时,它会生成以下命名空间前缀:

<env:Envelope xmlns:env="http://schemas.xmlsoap.org/soap/envelope/">
<env:Body ...>
<!-- body goes here -->
</env:Body>
</env:Envelope>

我的问题是,管理我的客户端所连接的服务器的我的对应方(一家大型汇款公司)拒绝接受 WebService 调用(请不要问我为什么),除非XMLNS(XML namespace 前缀是 soapenv)。像这样:

<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/">
<soapenv:Body ...>
<!-- body goes here -->
</soapenv:Body>
</soapenv:Envelope>

所以我的问题是:

有没有一种方法可以让我命令 JAXWS(或任何其他 Java WS 客户端技术)使用 soapenv 而不是 env 作为 XMLNS 生成客户端> 前缀?是否有API 调用 来设置此信息?

谢谢!

最佳答案

也许对你来说已经晚了,我不确定这是否可行,但你可以试试。

首先你需要实现一个SoapHandler,在handleMessage方法中你可以修改SOAPMessage。我不确定您是否可以直接修改该前缀,但您可以尝试:

public class MySoapHandler implements SOAPHandler<SOAPMessageContext>
{

@Override
public boolean handleMessage(SOAPMessageContext soapMessageContext)
{
try
{
SOAPMessage message = soapMessageContext.getMessage();
// I haven't tested this
message.getSOAPHeader().setPrefix("soapenv");
soapMessageContext.setMessage(message);
}
catch (SOAPException e)
{
// Handle exception
}

return true;
}

...
}

然后你需要创建一个HandlerResolver:

public class MyHandlerResolver implements HandlerResolver
{
@Override
public List<Handler> getHandlerChain(PortInfo portInfo)
{
List<Handler> handlerChain = Lists.newArrayList();
Handler soapHandler = new MySoapHandler();
String bindingID = portInfo.getBindingID();

if (bindingID.equals("http://schemas.xmlsoap.org/wsdl/soap/http"))
{
handlerChain.add(soapHandler);
}
else if (bindingID.equals("http://java.sun.com/xml/ns/jaxws/2003/05/soap/bindings/HTTP/"))
{
handlerChain.add(soapHandler);
}

return handlerChain;
}
}

最后,您必须将 HandlerResolver 添加到您的客户端服务:

Service service = Service.create(wsdlLoc, serviceName);
service.setHandlerResolver(new MyHandlerResolver());

关于java - 更改使用 JAXWS 生成的默认 XML 命名空间前缀,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3846121/

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