webservice soap
发布时间:2020-12-16 23:35:24 所属栏目:安全 来源:网络整理
导读:import java.io.IOException;import java.io.StringReader;import java.io.StringWriter;import java.net.URL;import javax.xml.bind.JAXBContext;import javax.xml.bind.JAXBException;import javax.xml.bind.Marshaller;import javax.xml.namespace.QName;
import java.io.IOException; import java.io.StringReader; import java.io.StringWriter; import java.net.URL; import javax.xml.bind.JAXBContext; import javax.xml.bind.JAXBException; import javax.xml.bind.Marshaller; import javax.xml.namespace.QName; import javax.xml.soap.MessageFactory; import javax.xml.soap.SOAPBody; import javax.xml.soap.SOAPBodyElement; import javax.xml.soap.SOAPElement; import javax.xml.soap.SOAPEnvelope; import javax.xml.soap.SOAPException; import javax.xml.soap.SOAPHeader; import javax.xml.soap.SOAPMessage; import javax.xml.soap.SOAPPart; import javax.xml.transform.Source; import javax.xml.transform.Transformer; import javax.xml.transform.TransformerConfigurationException; import javax.xml.transform.TransformerException; import javax.xml.transform.TransformerFactory; import javax.xml.transform.TransformerFactoryConfigurationError; import javax.xml.transform.dom.DOMResult; import javax.xml.transform.stream.StreamSource; import javax.xml.ws.Dispatch; import javax.xml.ws.Service; import javax.xml.ws.soap.SOAPBinding; import javax.xml.ws.soap.SOAPFaultException; import javax.xml.xpath.XPath; import javax.xml.xpath.XPathConstants; import javax.xml.xpath.XPathExpressionException; import javax.xml.xpath.XPathFactory; import org.junit.Test; import org.w3c.dom.Document; import org.w3c.dom.Node; import org.w3c.dom.NodeList; public class TestSoap { private String ns = "http://service.soap.org/"; private String wsdlURL = "http://localhost:8000/ms?wsdl"; @Test public void test01(){ try { //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根据QNqme创建相应节点 QName qname = new QName(ns,"add","ns");//<ns:add xlmns = "http://www.temple.java/webservice"> //如果试用一下方法,</>会幻化为< //body.addBodyElement(qname).setValue("<a>1</a><b>2</b>"); SOAPBodyElement element = body.addBodyElement(qname); element.addChildElement("a").setValue("22"); element.addChildElement("b").setValue("10"); //打印消息 message.writeTo(System.out); } catch (SOAPException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } } @Test public void test02(){ try { //1创建服务 URL url = new URL(wsdlURL); QName qname = new QName(ns,"MyServiceImplService"); Service service = Service.create(qname); //给服务添加添加port service.addPort(new QName(ns,"MyServiceImplPort"),SOAPBinding.SOAP11HTTP_BINDING,"http://localhost:8000/ms"); //2创建dispatch Dispatch<SOAPMessage> dispatch = service.createDispatch(new QName(ns,SOAPMessage.class,Service.Mode.MESSAGE); SOAPMessage message = MessageFactory.newInstance().createMessage(); SOAPEnvelope envelope = message.getSOAPPart().getEnvelope(); SOAPBody body = envelope.getBody(); //4创建QName来制定消息中传递的数据 QName ename = new QName(ns,"nn"); SOAPElement ele = body.addBodyElement(ename); ele.addChildElement("a").setValue("12"); ele.addChildElement("b").setValue("10"); //message.writeTo(System.out); System.out.print("invoking..."); //传递消息 SOAPMessage response = dispatch.invoke(message); response.writeTo(System.out); //将响应消息转化为dom对象 Document doc = response.getSOAPPart().getEnvelope().getBody().extractContentAsDocument(); String str = doc.getElementsByTagName("addResult").item(0).getTextContent(); System.out.print(str); } catch (SOAPException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } } @Test public void test03() { try { //1、创建服务(Service) URL url = new URL(wsdlURL); QName sname = new QName(ns,"MyServiceImplService"); Service service = Service.create(url,sname); //2、创建Dispatch(通过源数据的方式传递) Dispatch<Source> dispatch = service.createDispatch(new QName(ns,Source.class,Service.Mode.PAYLOAD); //3、根据用户对象创建相应的xml User user = new User(3,"zs","张三","22222"); JAXBContext ctx = JAXBContext.newInstance(User.class); Marshaller mar = ctx.createMarshaller(); mar.setProperty(Marshaller.JAXB_FRAGMENT,true); StringWriter writer= new StringWriter(); mar.marshal(user,writer); //4、封装相应的part addUser String payload = "<nn:addUser xmlns:nn=""+ns+"">"+writer.toString()+"</nn:addUser>"; System.out.println(payload); StreamSource rs = new StreamSource(new StringReader(payload)); //5、通过dispatch传递payload Source response = (Source)dispatch.invoke(rs); //6、将Source转化为DOM进行操作,使用Transform对象转换 Transformer tran = TransformerFactory.newInstance().newTransformer(); DOMResult result = new DOMResult(); tran.transform(response,result); //7、处理相应信息(通过xpath处理) XPath xpath = XPathFactory.newInstance().newXPath(); NodeList nl = (NodeList)xpath.evaluate("//user",result.getNode(),XPathConstants.NODESET); User ru = (User)ctx.createUnmarshaller().unmarshal(nl.item(0)); System.out.println(ru.getNickname()); } catch (IOException e) { e.printStackTrace(); } catch (JAXBException e) { e.printStackTrace(); } catch (TransformerConfigurationException e) { e.printStackTrace(); } catch (TransformerFactoryConfigurationError e) { e.printStackTrace(); } catch (TransformerException e) { e.printStackTrace(); } catch (XPathExpressionException e) { e.printStackTrace(); } } @Test public void test04(){ try { //1创建服务 URL url = new URL(wsdlURL); QName qname = new QName(ns,Service.Mode.MESSAGE); //3SOAPBody SOAPMessage message = MessageFactory.newInstance().createMessage(); SOAPEnvelope envelope = message.getSOAPPart().getEnvelope(); SOAPBody body = envelope.getBody(); //3.2处理SOAPHeader SOAPHeader header = envelope.getHeader(); if(header == null) header = envelope.addHeader(); QName hname = new QName(ns,"authInfo","nn"); header.addHeaderElement(hname).setValue("abcd"); //4创建QName来制定消息中传递的数据 QName ename = new QName(ns,"list","nn"); SOAPElement ele = body.addBodyElement(ename); message.writeTo(System.out); System.out.print("invoking..."); //传递消息 SOAPMessage response = dispatch.invoke(message); response.writeTo(System.out); //将响应消息转化为dom对象 Document doc = response.getSOAPBody().extractContentAsDocument(); NodeList nl =doc.getElementsByTagName("user"); JAXBContext ctx = JAXBContext.newInstance(User.class); for(int i = 0; i< nl.getLength(); i ++){ Node n = nl.item(i); User user = (User)ctx.createUnmarshaller().unmarshal(n); System.out.println(user.getNickname()); } } catch (SOAPException e) { e.printStackTrace(); } catch (IOException e) { } catch (JAXBException e) { e.printStackTrace(); } } @Test public void test05() throws JAXBException{ try { //1创建服务 URL url = new URL(wsdlURL); QName qname = new QName(ns,Service.Mode.MESSAGE); //3SOAPBody SOAPMessage message = MessageFactory.newInstance().createMessage(); SOAPEnvelope envelope = message.getSOAPPart().getEnvelope(); SOAPBody body = envelope.getBody(); //4创建QName来制定消息中传递的数据 QName ename = new QName(ns,"login","nn"); SOAPElement ele = body.addBodyElement(ename); ele.addChildElement("username").setValue("ss"); ele.addChildElement("password").setValue("13"); message.writeTo(System.out); System.out.print("invoking..."); //传递消息 SOAPMessage response = dispatch.invoke(message); response.writeTo(System.out); }catch(SOAPFaultException e){ System.out.print(e.getMessage()); } catch (SOAPException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } } } (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |