【问题标题】:Axis 1.4 How to modify soap envelope attributes?Axis 1.4 如何修改soap信封属性?
【发布时间】:2013-11-19 13:02:47
【问题描述】:

这是我想送去服务的信封:

<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:ger="http://www.more.com.br/MC/Geral" xmlns:num="http://www.more.com.br/SN/Numero">

如何使用 Axis 1.4 实现这一点

我需要修改命名空间!

我使用的是 JDK 1.5

【问题讨论】:

  • Axis 1.4 非常老旧,并且在很多方面与 Axis 2 或 CXF 相比不够灵活。你有机会切换框架吗?
  • Axis 2 在 JDK 1.5 或 JDK 1.4 中运行?
  • 我把这个 MessageContext message = call.getMessageContext(); SOAPMessage soapMessage = message.getMessage(); SOAPPart sp = (SOAPPart)soapMessage.getSOAPPart(); //SOAPPart sp = (SOAPPart) mess.getSOAPPart(); SOAPEnvelope env = (SOAPEnvelope) sp.getEnvelope(); env.addNamespaceDeclaration("more.com.br/MC/Geral", "ger");
  • 如果您使用的是 JDK 1.5,您应该可以迁移到 Axis 2 或 CXF。
  • 好的,谢谢,我去试试……

标签: java web-services axis jax-rpc


【解决方案1】:

由于我无法在任何地方找到此答案,以下是我使用 Axis 1.4 的方法。

首先,您需要创建一个 Handler 类来修改 SOAP Envelope。此 Handler 必须扩展 BasicHandler。

public class AxisClientEnvelopeHandler extends BasicHandler {

    @Override
    public void invoke(MessageContext msgContext) throws AxisFault {

        try {
            // get the soap header
            SOAPMessageContext smc = (SOAPMessageContext) msgContext;
            SOAPMessage message = smc.getMessage();
            SOAPEnvelope envelope = message.getSOAPPart().getEnvelope();

            // fiddle with the namespaces
            envelope.addNamespaceDeclaration("YOUR NAMESPACE");

        } catch (SOAPException e) {
            e.printStackTrace();
        }
    }
}

然后您必须将此处理程序添加到您的 SOAP 调用中。这是通过在您的服务定位器上设置一些属性来完成的。

// Add Handler to Axis SOAP calls
SimpleProvider clientConfig = new SimpleProvider();
AxisClientEnvelopeHandler envelopeHandler = new AxisClientEnvelopeHandler();
SimpleChain reqHandler = new SimpleChain();
SimpleChain respHandler = new SimpleChain();
reqHandler.addHandler(envelopeHandler);
Handler pivot = new HTTPSender();
Handler transport = new SimpleTargetedChain(reqHandler, pivot, respHandler);
clientConfig.deployTransport(HTTPTransport.DEFAULT_TRANSPORT_NAME, transport);
locator.setEngineConfiguration(clientConfig);
locator.setEngine(new AxisClient(clientConfig));

之后,您可以拨打电话,SOAP Envelope 将根据您的 Handler 进行修改。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-12-16
    • 1970-01-01
    • 2023-04-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多