• 技术文章 >Java >java教程

    完成java中web service方式的方法介绍

    黄舟黄舟2017-05-15 09:46:52原创1877

    这篇文章主要为大家详细介绍了java实现简单的webservice方式,具有一定的参考价值,感兴趣的小伙伴们可以参考一下

    本文实例为大家分享了java实现webservice方式的具体代码,供大家参考,具体内容如下

    经过测试 jdk1.6.10以下会出现bug 建议使用10以上版本

    1、定义接口

    package org.enson.chan;
     
    import javax.jws.WebService;
    import javax.jws.soap.SOAPBinding;
     
    @WebService
    @SOAPBinding(style=SOAPBinding.Style.RPC)
    public interface IMyService {
     public int add(int a , int b);
     
     public int max(int a , int b);
    }

    2、实现接口

    package org.enson.chan;
    import javax.jws.WebService;
    
    @WebService(endpointInterface="org.enson.chan.IMyService")
    public class MyServiceImpl implements IMyService {
    
     public int add(int a, int b) {
     System.out.println(a+"+"+b+"="+(a+b));
     return a+b;
     }
    
     public int max(int a, int b) {
     System.out.println("a与b比较大小,取大值"+((a>b)?a:b));
     return (a>b)?a:b;
     }
    
    }

    3、定义服务

    package org.enson.chan;
     
    import javax.xml.ws.Endpoint;
     
    public class MyServer {
     
     public static void main(String[] args) {
     String address = "http://localhost:8090/ns";
     Endpoint.publish(address, new MyServiceImpl());
     }
    }

    4、测试服务

    package org.enson.chan;
    
    import java.net.MalformedURLException;
    import java.net.URL;
    
    import javax.xml.namespace.QName;
    import javax.xml.ws.Service;
    
    public class TestClient {
    
     public static void main(String[] args) {
     try {
      URL url = new URL("http://localhost:8090/ns?wsdl");
      QName sname = new QName("http://chan.enson.org/", "MyServiceImplService");
      //创建服务
      Service service = Service.create(url,sname);
      //实现接口
      IMyService ms = service.getPort(IMyService.class);
      System.out.println(ms.add(12,33));
      //以上服务有问题,依然依赖于IMyServie接口
     } catch (MalformedURLException e) {
      // TODO Auto-generated catch block
      e.printStackTrace();
     }
     }
    
    }

    5、TestSoap

    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.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.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.soap.service.User;
    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:8989/ms?wsdl";
     @Test
     public void test01() {
     try {
      MessageFactory factory = MessageFactory.newInstance();
      
      SOAPMessage message = factory.createMessage();
      SOAPPart part = message.getSOAPPart();
      SOAPEnvelope envelope = part.getEnvelope();
      SOAPBody body = envelope.getBody();
      QName qname = new QName("http://java.zttc.edu.cn/webservice", 
       "add","ns");//<ns:add xmlns="http://java.zttc.edu.cn/webservice"/>
      //body.addBodyElement(qname).setValue("<a>1</a><b>2</b>");
      SOAPBodyElement ele = body.addBodyElement(qname);
      ele.addChildElement("a").setValue("22");
      ele.addChildElement("b").setValue("33");
      message.writeTo(System.out);
     } catch (SOAPException e) {
      e.printStackTrace();
     } catch (IOException e) {
      e.printStackTrace();
     }
     }
     
     @Test
     public void test02() {
     try {
      URL url = new URL(wsdlUrl);
      QName sname = new QName(ns,"MyServiceImplService");
      Service service = Service.create(url,sname);
      
      Dispatch<SOAPMessage> dispatch = service.createDispatch(new QName(ns,"MyServiceImplPort"),
       SOAPMessage.class, Service.Mode.MESSAGE);
      
      SOAPMessage msg = MessageFactory.newInstance().createMessage();
      SOAPEnvelope envelope = msg.getSOAPPart().getEnvelope();
      SOAPBody body = envelope.getBody();
      
      QName ename = new QName(ns,"add","nn");//<nn:add xmlns="xx"/>
      SOAPBodyElement ele = body.addBodyElement(ename);
      ele.addChildElement("a").setValue("22");
      ele.addChildElement("b").setValue("33");
      msg.writeTo(System.out);
      System.out.println("\n invoking.....");
      
      
      SOAPMessage response = dispatch.invoke(msg);
      response.writeTo(System.out);
      System.out.println();
      
      Document doc = response.getSOAPPart().getEnvelope().getBody().extractContentAsDocument();
      String str = doc.getElementsByTagName("addResult").item(0).getTextContent();
      System.out.println(str);
     } catch (SOAPException e) {
      e.printStackTrace();
     } catch (IOException e) {
      e.printStackTrace();
     }
     }
     
     @Test
     public void test03() {
     try {
      URL url = new URL(wsdlUrl);
      QName sname = new QName(ns,"MyServiceImplService");
      Service service = Service.create(url,sname);
      
      Dispatch<Source> dispatch = service.createDispatch(new QName(ns,"MyServiceImplPort"),
       Source.class, Service.Mode.PAYLOAD);
      
      User user = new User(3,"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);
      
      String payload = "<nn:addUser xmlns:nn=\""+ns+"\">"+writer.toString()+"</nn:addUser>";
      System.out.println(payload);
      StreamSource rs = new StreamSource(new StringReader(payload));
      
      Source response = (Source)dispatch.invoke(rs);
      
      Transformer tran = TransformerFactory.newInstance().newTransformer();
      DOMResult result = new DOMResult();
      tran.transform(response, result);
      
      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 {
      URL url = new URL(wsdlUrl);
      QName sname = new QName(ns,"MyServiceImplService");
      Service service = Service.create(url,sname);
      
      Dispatch<SOAPMessage> dispatch = service.createDispatch(new QName(ns,"MyServiceImplPort"),
       SOAPMessage.class, Service.Mode.MESSAGE);
      
      SOAPMessage msg = MessageFactory.newInstance().createMessage();
      SOAPEnvelope envelope = msg.getSOAPPart().getEnvelope();
      SOAPBody body = envelope.getBody();
      
      SOAPHeader header = envelope.getHeader();
      if(header==null) header = envelope.addHeader();
      QName hname = new QName(ns,"authInfo","nn");
      header.addHeaderElement(hname).setValue("aabbccdd");
      
      QName ename = new QName(ns,"list","nn");//<nn:add xmlns="xx"/>
      body.addBodyElement(ename);
      msg.writeTo(System.out);
      System.out.println("\n invoking.....");
      
      
      SOAPMessage response = dispatch.invoke(msg);
      response.writeTo(System.out);
      System.out.println();
      
      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 u = (User)ctx.createUnmarshaller().unmarshal(n);
      System.out.println(u.getNickname());
      }
     } catch (SOAPException e) {
      e.printStackTrace();
     } catch (IOException e) {
      e.printStackTrace();
     } catch (JAXBException e) {
      e.printStackTrace();
     }
     }
     
     @Test
     public void test05() {
     try {
      URL url = new URL(wsdlUrl);
      QName sname = new QName(ns,"MyServiceImplService");
      Service service = Service.create(url,sname);
      
      Dispatch<SOAPMessage> dispatch = service.createDispatch(new QName(ns,"MyServiceImplPort"),
       SOAPMessage.class, Service.Mode.MESSAGE);
      
      SOAPMessage msg = MessageFactory.newInstance().createMessage();
      SOAPEnvelope envelope = msg.getSOAPPart().getEnvelope();
      SOAPBody body = envelope.getBody();
      
      QName ename = new QName(ns,"login","nn");//<nn:add xmlns="xx"/>
      SOAPBodyElement ele = body.addBodyElement(ename);
      ele.addChildElement("username").setValue("ss");
      ele.addChildElement("password").setValue("dd");
      msg.writeTo(System.out);
      System.out.println("\n invoking.....");
      
      
      SOAPMessage response = dispatch.invoke(msg);
      response.writeTo(System.out);
      System.out.println();
      
     } catch(SOAPFaultException e){
      System.out.println(e.getMessage());
     } catch (SOAPException e) {
      e.printStackTrace();
     } catch (IOException e) {
      e.printStackTrace();
     } 
     }
    }

    【相关推荐】

    1. 特别推荐“php程序员工具箱”V0.1版本下载

    2. Java免费视频教程

    3. YMP在线手册

    以上就是完成java中web service方式的方法介绍的详细内容,更多请关注php中文网其它相关文章!

    声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn核实处理。
    专题推荐:java webservice
    上一篇:Java获取Properties文件内容的四种方式 下一篇:自己动手写 PHP MVC 框架(40节精讲/巨细/新人进阶必看)

    相关文章推荐

    • Java数据结构常见排序算法(总结分享)• 一文详解怎么实现微服务鉴权• Java中Map集合体系的基本使用和常用API• 一起来分析java设计模式之单例• 一文搞懂Java线程池实现原理
    1/1

    PHP中文网