webservice


 实现一个简单的webservice。

  java中有三种webservice规范,分别为JAX-WS、JAX-RS、JAXM&SAAJ。

  同时Java中开发webservice的框架有很多,常见的几种jdk6、Apache Axis1、Apache Axis2、Codehaus XFire、Apache CXF等。其中jdk6集成了JAX-WS.

  本人第一次发博客,参考Fskjb同志。实验过程中遇到很多中问题,比如如何处理XML返回、复杂数据类型等等。常见错误会发在下一个博客中。

创建并发布服务器端应用

  1.新建web service project
  设置如下图。


  

2.建立一个实现类,代码如下:

复制代码
 1 package cug;
 2 import java.io.StringWriter;
 3 
 4 import javax.jws.WebService;
 5 import javax.xml.parsers.DocumentBuilder;
 6 import javax.xml.parsers.DocumentBuilderFactory;
 7 import javax.xml.transform.OutputKeys;
 8 import javax.xml.transform.Transformer;
 9 import javax.xml.transform.TransformerFactory;
10 import javax.xml.transform.dom.DOMSource;
11 import javax.xml.transform.stream.StreamResult;
12 
13 import org.w3c.dom.*;
14 @WebService
15 public class XmlTest {
16     public String sayHaha(String request)
17     {
18         return "Haha, " + request + ", O.K. !"; 
19     }
20     public double add(double num1,double num2)
21     {
22         return num1+num2;        
23     }
24     public String Test()
25     {
26         return "This is a Test";
27     }
28     public  String CreateDom()
29     {
30         Document doc=null ;
31         Element school=null,student=null;
32         Element name = null;
33         Element num = null;
34         Element classes = null;
35         Element address = null;
36         Element tel = null;
37         try{
38             DocumentBuilderFactory dbFactory=DocumentBuilderFactory.newInstance();
39             DocumentBuilder dbBuilder=dbFactory.newDocumentBuilder();
40             doc=dbBuilder.newDocument();
41             if(doc!=null)
42             {
43                 school = doc.createElement("School");
44                 student = doc.createElement("Student");
45                 student.setAttribute("examId", "23");
46                 name = doc.createElement("Name");
47                 name.appendChild(doc.createTextNode("香香"));
48                 student.appendChild(name);
49                 num = doc.createElement("Num");
50                 num.appendChild(doc.createTextNode("1006010066"));
51                 student.appendChild(num);
52 
53                 classes = doc.createElement("Classes");
54                 classes.appendChild(doc.createTextNode("眼视光5"));
55                 student.appendChild(classes);
56 
57                 address = doc.createElement("Address");
58                 address.appendChild(doc.createTextNode("浙江温州"));
59                 student.appendChild(address);
60 
61                 tel = doc.createElement("Tel");
62                 tel.appendChild(doc.createTextNode("123890"));
63                 student.appendChild(tel);
64                 school.appendChild(student);
65                 doc.appendChild(school);
66             }
67         }
68         catch (Exception e) {
69             e.printStackTrace();
70         }
71         
72         String result = null;
73 
74         if (doc != null)
75         {
76             StringWriter strWtr = new StringWriter();
77             StreamResult strResult = new StreamResult(strWtr);
78             TransformerFactory tfac = TransformerFactory.newInstance();
79             try
80             {
81                 Transformer t = tfac.newTransformer();
82                 t.setOutputProperty(OutputKeys.ENCODING, "gb2312");
83                 t.setOutputProperty(OutputKeys.INDENT, "yes");
84                 t.setOutputProperty(OutputKeys.METHOD, "xml"); // xml, html,// text
85                 t.setOutputProperty(
86                         "{http://xml.apache.org/xslt}indent-amount", "4");
87                 t.transform(new DOMSource(doc.getDocumentElement()),
88                         strResult);
89             }
90             catch (Exception e)
91             {
92                 System.err.println("XML.toString(Document): " + e);
93             }
94             result = strResult.getWriter().toString();
95         }
96         return result;
97     }
98 }
复制代码

这里只需要一个实现类,不过为了更加规范,一般还是写成接口+实现类的形式。
 3.建立 webservice  

选择工程名,点击工具栏的new web service按钮。


然后如下配置:

接着(在JAVA BEAN中输入实现类的名称,选择generate wsdl in project):

点击finish后包中多出一个该实现类的代理类XmlTestDelegate.java

4.导入包
工程-属性-build path-add library-myeclipse libraries导入以下两个包

如果缺少这两个包,tomcat启动时会出现以下错误: 

 

4.新建一个测试类:

 

?
package cug;
 
public class Client {
     public static void main(String[] args)
     {
         XmlTestService service= new XmlTestService();
         XmlTestDelegate d=service.getXmlTestPort();
         System.out.println(d.createDom());
     }
}

 

 输出结果:

 

OK!大功告成!

感谢Fskjb的博客

参考文献:Fskjb http://www.cnblogs.com/Fskjb/archive/2009/08/17/1548370.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值