通过注解修改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,"HelloWorldPort"),null);
		System.err.println(">>:"+obj);
		
	}
}



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值