Webservice06---SOAP消息的传递和处理(基于Message方式)

使用Message方式传递和处理SOAP消息。

1.1、创建服务

private String wsdlUrlStr = "http://localhost:9999/ns?wsdl";
private String targetNameSpace = "http://service.chb.com/";
//1、创建服务(Service)
//1.1、创建URL , 
URL wsdlUrl = new URL(wsdlUrlStr);
//1.2、创建QName;
QName qName = new QName(targetNameSpace, 
                                    "MyServiceImplService");    //发布服务名称
Service service = Service.create(wsdlUrl, qName);

1.2、创建Dispatch ,通过Dispatch 发送SOAP消息, 已经获取响应的消息。

这里写图片描述

1.3、创建SOAPMessage, 并通过QName指定消息中的数据传递。

            //3、创建SOAPMessage 
            SOAPMessage message = MessageFactory.newInstance().createMessage();
            SOAPEnvelope envelope = message.getSOAPPart().getEnvelope();//获取信封
            SOAPBody body = envelope.getBody();

            //4、创建QName 来指定消息中传递数据
            QName eleQName = new QName(targetNameSpace, "add", "q0");
            SOAPElement ele = body.addBodyElement(eleQName);
            ele.addChildElement("a").setValue("22");
            ele.addChildElement("b").setValue("33");
            message.writeTo(System.out);//打印一下请求message

1.4、通过Dispatch 发送Message

            //5、通过Dispatch发送消息。
            SOAPMessage response = dispatch.invoke(message);
            response.writeTo(System.out);//输出响应的消息。

1.5、通过Document 获取响应消息中的参数。

            //6、获取响应message的参数。
            Document doc = response.getSOAPBody().extractContentAsDocument();
            String result = doc.getElementsByTagName("addResult").item(0).getTextContent();
            System.out.println("\n" + result);

完整代码

public class TestSOAP {

    private String wsdlUrlStr = "http://localhost:9999/ns?wsdl";
    private String targetNameSpace = "http://service.chb.com/";

    @Test
    public void test02() {
        try {
            //1、创建服务(Service)
            //1.1、创建URL , 
            URL wsdlUrl = new URL(wsdlUrlStr);
            //1.2、创建QName;
            QName qName = new QName(targetNameSpace, 
                                    "MyServiceImplService");    //发布服务名称
            Service service = Service.create(wsdlUrl, qName);

            /**
             <service name="MyServiceImplService">
                <port name="MyServiceImplPort" binding="tns:MyServiceImplPortBinding">
                    <soap:address location="http://localhost:9999/ns"/>
                </port>
            </service>
             */
            //2、创建Dispatch 
            QName portName = new QName(targetNameSpace, "MyServiceImplPort");
            Dispatch<SOAPMessage> dispatch = service.createDispatch(portName, 
                            SOAPMessage.class, 
                            Service.Mode.MESSAGE);//消息传递方式

            //3、创建SOAPMessage 
            SOAPMessage message = MessageFactory.newInstance().createMessage();
            SOAPEnvelope envelope = message.getSOAPPart().getEnvelope();//获取信封
            SOAPBody body = envelope.getBody();

            //4、创建QName 来指定消息中传递数据
            QName eleQName = new QName(targetNameSpace, "add", "q0");
            SOAPElement ele = body.addBodyElement(eleQName);
            ele.addChildElement("a").setValue("22");
            ele.addChildElement("b").setValue("33");
            message.writeTo(System.out);//打印一下请求message


            //5、通过Dispatch发送消息。
            System.out.println("\n invoke.....");
            SOAPMessage response = dispatch.invoke(message);
            response.writeTo(System.out);

            //6、获取响应message的参数。
            Document doc = response.getSOAPBody().extractContentAsDocument();
            String result = doc.getElementsByTagName("addResult").item(0).getTextContent();
            System.out.println("\n" + result);

        } catch (MalformedURLException e) {
            e.printStackTrace();
        } catch (SOAPException e) {
            e.printStackTrace();
        } catch (IOException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }


    }

}
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值