传递实体类:User.java
package cn.lichen.soap; import javax.xml.bind.annotation.XmlRootElement; @XmlRootElement public class User { private int id; private String username; private String nickname; private String password; public User() { } public User(int id,String username,String nickname,String password) { this.id = id; this.username = username; this.nickname = nickname; this.password = password; } public int getId() { return id; } public void setId(int id) { this.id = id; } public String getUsername() { return username; } public void setUsername(String username) { this.username = username; } public String getNickname() { return nickname; } public void setNickname(String nickname) { this.nickname = nickname; } public String getpassword() { return password; } public void setPassword(String password) { this.password = password; } }
接口:IMyService.java
package cn.lichen.soap; import java.util.List; @WebService public interface IMyService { @WebResult(name="addResult") public int add(@WebParam(name="a")int a,@WebParam(name="b")int b); public int minus(int a,int b); @WebResult(name="user") public User addUser(@WebParam(name="user")User user); @WebResult(name="user") public List<User> getAllUser(); }
注意:在方法上添加@WebResult(name="user")之后,返回的结果自动指定为User对象。
实现类:MyServiceImpl.java
package cn.lichen.soap; import java.util.ArrayList; @WebService(endpointInterface="cn.lichen.soap.IMyService") public class MyServiceImpl implements IMyService { private static List<User> users = new ArrayList<User>(); public MyServiceImpl() { users.add(new User(1,"admin","管理员","123")); } @Override public int add(int a,int b) { System.out.println(a+"+"+b+"="+(a+b)); return (a+b); } @Override public int minus(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; } @Override public List<User> getAllUser() { return users; } }
服务类:MyService.java
package cn.lichen.soap; import javax.xml.ws.Endpoint; public class MyService { public static void main(String[] args) { String address = "http://localhost:9999/ns"; Endpoint.publish(address,new MyServiceImpl()); } }
测试类:
/** * @Title: test03 * @Description: 使用Payload传递消息和处理消息 * @param * @return void * @throws */ @Test public void test03() { try { // 创建访问wsdl服务的URL URL url = new URL("http://localhost:9999/ns?wsdl"); // 通过Qname指明服务的具体信息 QName name = new QName("http://soap.lichen.cn/","MyServiceImplService"); // 创建service Service service = Service.create(url,name); // 创建dispatch dispatch<Source> dispatch = service.createdispatch(new QName( "http://soap.lichen.cn/","MyServiceImplPort"),Source.class,Service.Mode.PAYLOAD); //根据用户对象创建相应的xml User user = new User(2,"zs","张三","11111"); 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=\""+"http://soap.lichen.cn/"+"\">"+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(); } }
/** * @Title: test05 * @Description: 用SOAPMessage传递SOAP的消息和处理(无参数) * @param * @return void * @throws */ @Test public void test05() { try { // 创建访问wsdl服务的URL URL url = new URL("http://localhost:9999/ns?wsdl"); // 通过Qname指明服务的具体信息 QName name = new QName("http://soap.lichen.cn/",name); // 创建dispatch dispatch<SOAPMessage> dispatch = service.createdispatch(new QName( "http://soap.lichen.cn/",SOAPMessage.class,Service.Mode.MESSAGE); // 创建SOAPmessage SOAPMessage message = MessageFactory.newInstance().createMessage(); SOAPEnvelope envelope = message.getSOAPPart().getEnvelope(); SOAPBody body = envelope.getBody(); QName qname = new QName("http://soap.lichen.cn/","getAllUser","xsd"); @SuppressWarnings("unused") SOAPBodyElement bodyElement = body.addBodyElement(qname); // 输入创建SOAPmessage message.writeto(System.out); System.out.println("\n\n" + "-----------invoking-------------" + "\n"); // 传递消息并且得到结果 SOAPMessage responseMessage = dispatch.invoke(message); // 输出得到的SOAPmessage responseMessage.writeto(System.out); // 将响应的消息转换为dom对象 Document doc = responseMessage.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 u = (User) ctx.createUnmarshaller().unmarshal(n); System.out.println("\n"+u.getNickname()); } } catch (SOAPException e) { e.printstacktrace(); } catch (IOException e) { e.printstacktrace(); } catch (JAXBException e) { e.printstacktrace(); } }
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。