天天看点

从零开始学习WebService--2

webservice信息的传递基础就是SOAP协议,所以,本章我们主要了解SOAP传递机制

概念性东东

QName

具体请参考文章:http://blog.csdn.net/lulin27861/article/details/23342883

举例说明

比如你创建一个QName

QName ename=new QName("http://service.soap.lul.com/","add","ns");

也就相当于创建了一个xml结点:<ns:add xmlns="http://service.soap.lul.com/">

SOAPMessage请求

- <soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:q0="http://service.soap.lul.com/" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">



- <soapenv:Body>



- <q0:add>



  <a>11</a> 


  <b>22</b> 

  </q0:add>

  </soapenv:Body>

  </soapenv:Envelope>           

SOAPMessage响应

- <S:Envelope xmlns:S="http://schemas.xmlsoap.org/soap/envelope/">
- <S:Body>
+ <ns2:addResponse xmlns:ns2="http://service.soap.lul.com/">
  <addResult>33</addResult> 
  </ns2:addResponse>
  </S:Body>
  </S:Envelope>           

简单实例

功能:创建SOAPMessage,发送给服务器,服务器返回一个SOAPMessage

服务端代码还是上一节的服务端代码,启动以后,新建JUnit Test Case:test02,代码如下:

private String wsdlUrl="http://localhost:8989/ms?wsdl";
	private String ns="http://service.soap.lul.com/";           
@Test
	public void test02(){
		try {
			//1.Create Service
			URL url=new URL(wsdlUrl);
			QName sname=new QName(ns,"MyServiceImplService");
			Service service=Service.create(url, sname);
			
			//2.Create Dispatch
			Dispatch<SOAPMessage> dispatch=service.createDispatch(new QName(ns,"MyServiceImplPort"),
					SOAPMessage.class, Service.Mode.MESSAGE);
			
			//3.Create SOAPMessage
			SOAPMessage message=MessageFactory.newInstance().createMessage();
			SOAPEnvelope envelope=message.getSOAPPart().getEnvelope();
			SOAPBody body=envelope.getBody();
			
			//4.Create QName to pass data of message
			QName ename=new QName(ns,"add","ns");//<ns:add xmlns="http://service.soap.lul.com/">
			SOAPBodyElement ele=body.addBodyElement(ename);
			ele.addChildElement("a").setValue("11");
			ele.addChildElement("b").setValue("22");
			message.writeTo(System.out);
			System.out.println("\n invoking......");
			
			//5.Pass message by dispatch.It will return response.
			SOAPMessage response=dispatch.invoke(message);
			response.writeTo(System.out);
			System.out.println();
			
			//6.Convert response to dom object
			Document doc=response.getSOAPPart().getEnvelope().getBody().extractContentAsDocument();
			String str=doc.getElementsByTagName("addResult").item(0).getTextContent();
			System.out.println(str);
			
		} catch (Exception e) {
			e.printStackTrace();
		}
	}           

继续阅读