1、显示的使用soap的header传递消息(不推荐使用,会破坏正常的代码结构,推荐使用handler处理)
@WebResult(name="deleteResult")public boolean deleteUser(@WebParam(header=true,name="adminName")String adminName,@WebParam(name="deleteName")String delName);
@Overridepublic boolean deleteUser(String adminName, String delName) {return true;}
wsdl:
xsd文件
调用代码:
/*** 使用了SOAP的hearder来传递消息(缺点:会改变方法的参数定义)*/@Testpublic void test4(){try {String namespace = "http://ws01.yzl.com/";String wsdlUrl = "http://localhost:8888/ws01?wsdl";//1、创建服务(Service)URL url = new URL(wsdlUrl);QName qname = new QName(namespace,"MyServiceImplService");Service service = Service.create(url, qname);//2、创建Dispatch//public interface Dispatch
System.out.println();//5、通过Dispatch传递消息,并返回响应消息SOAPMessage returnMessage = dispatch.invoke(message);returnMessage.writeTo(System.out);//打印返回消息
System.out.println();//5、解析返回的SOAP消息的XMLDocument doc = returnMessage.getSOAPBody().extractContentAsDocument();//Document doc = returnMessage.getSOAPPart().getEnvelope().getBody().extractContentAsDocument();String result = doc.getElementsByTagName("deleteResult").item(0).getTextContent();System.out.println("result is :" + result);} catch (Exception e) {e.printStackTrace();}}
结果:
<SOAP-ENV:Envelope xmlns:SOAP-ENV&#61;"http://schemas.xmlsoap.org/soap/envelope/">
<SOAP-ENV:Header><nn:adminName xmlns:nn&#61;"http://ws01.yzl.com/">administratornn:adminName>SOAP-ENV:Header>
<SOAP-ENV:Body><nn:deleteUser xmlns:nn&#61;"http://ws01.yzl.com/"/>SOAP-ENV:Body>
SOAP-ENV:Envelope>
<S:Envelope xmlns:S&#61;"http://schemas.xmlsoap.org/soap/envelope/">
<S:Header/>
<S:Body>
<ns2:deleteUserResponse xmlns:ns2&#61;"http://ws01.yzl.com/"><deleteResult>truedeleteResult>ns2:deleteUserResponse>
S:Body>
S:Envelope>
result is :true