最近研究了一下WebService的用法,使用的是xfire+tomcat以及xfire+Weblogic9.2.借助于工具MyEclipse建立一个WebService是非常容易的事情,可以通过MyEclipse的File ——》New ——》Web Service Project的步骤建立一个WebService工程,如果使用Xfire的话,注意选择xfire。这样只是建立了一个WebService工程,要想生成一个服务端的框架可以通过File——》New——》Other——》Web Services ——》Web Servie,在New Web Service页面上选择已经创建好的Web Service Project.在Strategy选项选择Create Web Service from java class ,并勾选上Create new java bean,完成后在名为I**(**为你的WebService名称)中定义WebService接口,在**Impl文件中实现你的WebService逻辑。然后使用tomcat发布就可以了。
在使用Weblogic作为服务器发布的时候,和上面步骤一样,只是进行发布的时候配置一下Weblogic就行。在这个过程中可能遇到以下问题:
一,在myeclipse启动不起来Weblogic,解决:进入Weblogic目录,手动启动就行。
二,weblogic启动可能报错:
<Unable to load descriptor C:\bea\user_projects\domains\base_domain\.\autodeploy\demo/WEB-INF/web.xml of module webProject. The error is weblogic.descriptor.DescriptorException: Unmarshaller failed
at weblogic.descriptor.internal.MarshallerFactory$1.createDescriptor
Caused by: com.bea.xml.XmlException: failed to load java type corresponding to e=web-app@http://java.sun.com/xml/ns/javaee
at com.bea.staxb.runtime.internal.UnmarshalResult.getPojoBindingType
解决方法:
我把原来的:
xmlns="http://java.sun.com/xml/ns/javaee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"> 换成: 再说说客户端编程,客户端也可以通过myeclipse自动生成,只要指定wsdl文件或者服务端的wsdl的URL。不但可以传递简单类型,也可以传递复杂类型。以下是客户端调用的代码示例: public static void main(String[] args) { MyWebServiceClient client = new MyWebServiceClient(); for(int i = 0; i
//create a default service endpoint
MyWebServicePortType service = client.getMyWebServiceHttpPort();
//TODO: Add custom client code here
//
//service.yourServiceOperationHere();
//调用operaiton方法
int re = service.operaiton(1900, 66, "*");
System.out.println("计算结果为:"+re);
//调用modified(User U)方法
ArrayOfUser a = new ArrayOfUser();
User u = new User();
//注意通过JAXB传递字符串型,因为绑定了JAXB,命名空间http://service.web一定要写对
JAXBElement
"http://service.web", "name"), String.class, "Mr.li");
u.setName(name);
u.setNumber(007);
//无法修改服务端设定的name和number
service.modified(u);
List
a.user = l;
a.user.add(u);
//调用addUser(List
ArrayOfUser li = (ArrayOfUser)service.addUser(a);
System.out.println(li.user.get(i).getName().getValue());
System.out.println(li.user.get(i).getNumber());
}
System.out.println("test client completed");
System.exit(0);
}
这样就完成了Webservice的建立和调用过程。
PS:WebService以我目前的理解好像不能处理传出参数,也就是我传入一个参数USer u,在服务端改变了User U的值(比如是名字和编号),客户端调用后,不能获得服务端修改的值。也就是服务端对客户端的响应内容都是通过返回值来的。如果哪位有不同见解,可以联系我,我们一起探讨。