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
  设置如下图。


  WebService入门

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按钮。


然后如下配置:
WebService入门
接着(在JAVA BEAN中输入实现类的名称,选择generate wsdl in project):
WebService入门
点击finish后包中多出一个该实现类的代理类XmlTestDelegate.java

4.导入包
工程-属性-build path-add library-myeclipse libraries导入以下两个包
WebService入门
如果缺少这两个包,tomcat启动时会出现以下错误: 

 

严重: Error configuring application listener of  class  com.sun.xml.ws.transport.http.servlet.WSServletContextListener
java.lang.ClassNotFoundException: com.sun.xml.ws.transport.http.servlet.WSServletContextListener

 


5.启动tomcat,验证并获取WSDL文件

启动tomcat后在浏览器中输入http://localhost:8080/jaxws_src/XmlTestPort并点击页面中的链接查看WSDL文件,如果该文件能正确显示证明服务器端大功告成。
wsdl文件的uri是http://localhost:8080/jaxws_src/XmlTestPort?wsdl(你可能会问URI中的XmlTestPort从何而来,其实这个名字由图4中的Services port设定)

也可以直接运行为Server Application,自动启动Tomcat。

创建客户端调用

(不要关闭TOMCAT啊,不然。。。。。)
1.新建java project,建立一包(包名安需求)net.
2.选择包点new web services client(参照本文的第二张图)
   ps:有别与xfire,客户端不一定是服务端相同类型的web services client,可以是一个普通的工程也OK!!
3.指定wsdl的URI或wsdl的文件路径(见上)。

 

 

 

 

WebService入门

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());

	}

}

 

 输出结果:

 WebService入门

OK!大功告成!

 

感谢Fskjb的博客

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

作者西芒xiaoP

出处http://www.cnblogs.com/panweishadow/

若用于非商业目的,您可以自由转载,但请保留原作者信息和文章链接URL。

 

你可能感兴趣的:(webservice)