WebService學習筆記(四)
阿新 • • 發佈:2019-01-30
一 soap訊息的格式
二 soap訊息的建立
java程式碼:
//1、建立訊息工廠
MessageFactory factory = MessageFactory.newInstance();
//2、根據訊息工廠建立SoapMessage
SOAPMessage message = factory.createMessage();
//3、建立SOAPPart
SOAPPart part = message.getSOAPPart();
//4、獲取SOAPENvelope
SOAPEnvelope envelope = part.getEnvelope();
//5、可以通過SoapEnvelope有效的獲取相應的Body和Header等資訊
SOAPBody body = envelope.getBody();
//6、根據Qname建立相應的節點(QName就是一個帶有名稱空間的節點)
//<ns:add xmlns="http://java.zttc.edu.cn/webservice"/>
QName qname = new QName("http://java.zttc.edu.cn/webservice", "add","ns");
//如果使用以下方式進行設定,會見<>轉換為<和>
//body.addBodyElement(qname).setValue("<a>1</a><b>2</b>");
SOAPBodyElement ele = body.addBodyElement(qname);
ele.addChildElement("a").setValue("22"); ele.addChildElement("b").setValue("33");
//列印訊息資訊
message.writeTo(System.out);
三 訊息傳遞
java程式碼:
//1、建立服務(Service)
URL url = new URL(wsdlUrl);
QName sname = new QName(ns,"MyServiceImplService");
Service service = Service.create (url,sname);
//2、建立Dispatch
Dispatch<SOAPMessage> dispatch = service.createDispatch(new QName(ns,"MyServiceImplPort"),SOAPMessage.class,Service.Mode.MESSAGE);
//3、建立SOAPMessage
SOAPMessage msg = MessageFactory.newInstance().createMessage();
SOAPEnvelope envelope = msg.getSOAPPart().getEnvelope();
SOAPBody body = envelope.getBody();
//4、建立QName來指定訊息中傳遞資料
QName ename = new QName(ns,"add","nn");//<nn:add xmlns="xx"/>
SOAPBodyElement ele = body.addBodyElement(ename);
ele.addChildElement("a").setValue("22");
ele.addChildElement("b").setValue("33");
msg.writeTo(System.out);
System.out.println("\n invoking.....");
//5、通過Dispatch傳遞訊息,會返回響應訊息
SOAPMessage response = dispatch.invoke(msg);
response.writeTo(System.out);
System.out.println();
//6、響應訊息處理,將響應的訊息轉換為dom物件
Document doc = response.getSOAPPart().getEnvelope().getBody().extractContentAsDocument();
String str = doc.getElementsByTagName("addResult").item(0).getTextContent();
System.out.println(str);