新建一个User类: packagecom.zhutulang.soap; importjavax.xml.bind.annotation.XmlRootElement;@XmlRootElementpublic class User { private String name; private String pwd; private int age; public User() { super(); } public User(String name
新建一个User类:
packagecom.zhutulang.soap; importjavax.xml.bind.annotation.XmlRootElement; @XmlRootElement public class User { private String name; private String pwd; private int age; public User() { super(); } public User(String name, String pwd, int age) { super(); this.name = name; this.pwd = pwd; this.age = age; } @Override public String toString() { return "[name:"+name+",pwd:"+pwd+",age:"+age+"]"; } public String getName() { return name; } public void setName(String name) { this.name = name; } public String getPwd() { return pwd; } public void setPwd(String pwd) { this.pwd = pwd; } public int getAge() { return age; } public void setAge(int age) { this.age = age; } }
然后在接口中新增一个方法:
@WebResult(name="user") public User addUser(@WebParam(name="user")User user);
接口实现很简单,就是把一个user加入list中
packagecom.zhutulang.soap; importjava.util.ArrayList; importjava.util.List; importjavax.jws.WebService; @WebService(endpointInterface="com.zhutulang.soap.MyServiceInter") public class MyServiceInterImpl implements MyServiceInter { private List<User> users = new ArrayList<User>(); @Override public int add(int a, int b) { System.out.println("a+b"+(a+b)); return a+b; } @Override public User addUser(User user) { users.add(user); return user; } } Test方法: /** * <p>Title: 通过payload发送消息</p> * <p>Description: </p> * @throws MalformedURLException * @throws JAXBException * @throwsTransformerFactoryConfigurationError * @throws TransformerException * @throws XPathExpressionException * @author zhutulang * @version 1.0 */ @Test public void test3() throws MalformedURLException, JAXBException,TransformerFactoryConfigurationError, TransformerException,XPathExpressionException{ //1.创建服务 URL url = new URL(wsdlUrl); QName qName = new QName(namespaceUrl, "MyServiceInterImplService"); Service service = Service.create(url, qName); //2.创建dispatch (通过源数据方式传递) Dispatch<Source> dispatch = service.createDispatch(new QName(namespaceUrl, "MyServiceInterImplPort"), Source.class, Service.Mode.PAYLOAD); //3.根据一个User对象创建相应的xml User user = new User("Lucy", "123456", 26); 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=\""+namespaceUrl+"\">"+writer.toString()+"</nn:addUser>"; System.out.println(payload); StreamSource rs = new StreamSource(new StringReader(payload)); //5.通过dispa传递payload Source response = dispatch.invoke(rs); //6.将source转换为DOM Transformer transformer = TransformerFactory.newInstance().newTransformer(); DOMResult result = new DOMResult(); transformer.transform(response, result); //7.处理相应的消息 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); }
相关的代码下载: http://download.csdn.net/detail/zhutulang/9487929