通过注解修改wsdl和service类调用服务

来源:互联网 发布:js eval对象字符串 编辑:程序博客网 时间:2024/05/19 22:02

1,我们不能直接在wsdl中修改他的内容,比如我们想修改service的name属性,来改变生成的类名,是不可以直接在文档中修改的,需要在发布类上使用注解方式修改。


在类上加注解:

即可。

通过wsimport生成Java文件,可以发现生成的类变成了MyHelloWorld.java


2,从wsdl中可以看到我们的包结构,即targetNamespace后面的数据,是倒置的包名,如果不希望暴露我们的包名,可以通过注解解决。



添加这个注解后,真实的包路径还是cn.ws,但是现实在wsdl页面中的就变成了我们修改后的名字:


生成Java类的时候的包路径也变成了com.wj。

 

3,发布服务的时候,不发布其中的一个方法,通过 @WebMethod(exclude=”true”)搞定。


那么发布之后将会不包含这个方法。

 

4,如果想将发布的一个方法在发布后显示另外一个名字,通过注解:@WebMethod(operationName=”sayHello”),将sayHi方法改成sayHello。


发布后,在wsdl页面看到的sayHi方法的名字为sayHello。

 

5,发布后的参数名是arg0,可以通过注解修改。在方法的参数前添加注解@WebParam(name=”YourName”)即可。


Arg0就变成了yourname。

 

6,想改变发布后的返回值的名字,返回值默认是return,可以在返回值上添加注解。

@WebResult(name=”backParam”)



在MyEclipse的SOAPWeb Service中也可以看到返回的xml中元素的改变。


7,本地通过底层Service类来调用服务方法。

先生成Java文件。将生成的包粘贴到项目中。

因为之前用注解修改了类名和方法名,所以new的时候要new MyHelloWorld,调用方法的时候要调用sayHello而不是sayHi。

新建一个java工程,将之前工程中的接口复制到这个项目中。


QName:完全限定名。

新建一个类,访问服务方法。

import java.net.URL;import javax.xml.namespace.QName;import javax.xml.ws.Service;/** * 调用远程代码的实现是Service类实现的。 * 内部包装了Socket * @author Administrator */public class Demo {public static void main(String[] args) throws Exception {String uri = "http://wj.com";URL url = new URL("http://192.168.1.254:2345/hello?wsdl");//包名+类名QName qname = new QName(uri,"MyHelloWorld");Service service = Service.create(url,qname);//new MyHelloWorld();//获取//new MyHelloWorld().getHelloWorldPort();HelloWorld hw = service.getPort(new QName(uri,"HelloWorldPort"),HelloWorld.class);String ss = hw.sayHello("王健同学");System.err.println("ss"+ss);System.err.println("----------------");Object obj = service.getPort(new QName(uri,"HelloWorldPort"),null);System.err.println(">>:"+obj);}}



原创粉丝点击