通过注解修改wsdl和service类调用服务
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,null); System.err.println(">>:"+obj); } } (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |