Axis 1.4如何修改soap信封属性?

时间:2013-11-19 13:02:48

标签: java web-services axis jax-rpc

这是我想发送给服务的信封:

<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

1 个答案:

答案 0 :(得分:0)

由于我无法在任何地方找到这个答案,所以我使用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();
        }
    }
}

然后,您必须将此Handler添加到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信封。