1、 新命令生成不同包结构的代码。用-p指定包名。命令如下
d: //进入D盘
mkdir WsTest /建立WsTest目录
cd WsTest //进入WsTest目录
wsimport -s . –p cn.itcast.zhanglei http://192.168.1.103:8888/hello?wsdl //指定包名
2、 根据博客1中得方法简单阐述理解wsdl文件,截图如下:
![](https://img-my.csdn.net/uploads/201301/08/1357629352_6509.jpg)
解析wsdl文件:以下解析属于我自己理解的文本。并非专业术语
说明:“由于WSDL文件是自下而上的倒叙方式。所以我们从下往上看”
1、<servicename="HelloWorldService"> :
从service切入,这是client端调用代码得到调用对象语句决定的:
//得到调用服务器端类对象
HelloWorld hw =
new HelloWorldService().getHelloWorldPort();
2、<portname="HelloWorldPort" binding="tns:HelloWorldPortBinding">
Protname是上面得到服务器之后的get方法名称。后面绑定的对象更是对该类的详细阐述包括方法等。继续往上看
3、<bindingname="HelloWorldPortBinding" type="tns:HelloWorld">
找到绑定的对象,看type属性继续追踪
4、<portTypename="HelloWorld">
找到表示该类的portype元素。看其子元素<operationname="SayHello">。Operation指定的也就是我们的方法。Sayhello的子元素中分别有
<inputwsam:Action="http://webservice.zhanglei.cn/HelloWorld/SayHelloRequest" message="tns:SayHello" />
<output wsam:Action="http://webservice.zhanglei.cn/HelloWorld/SayHelloResponse" message="tns:SayHelloResponse" />
此处表示SayHello方法的参数。继续追踪
5、<part name="parameters" element="tns:SayHello" />和<part name="parameters" element="tns:SayHelloResponse" />
参数的详细解析如上
6、<xsd:import namespace="http://webservice.zhanglei.cn/" schemaLocation="http://192.168.1.103:8888/hello?xsd=1" />
头部声明的namespace为服务器包得名称倒叙。加上http://也就是cn.zhanglei.webservice加上http://并且倒叙变为http://webservice.zhanglei.cn/
3、 上面解析wsdl文件完成之后。下一步通过注解去更改这个文档。因为很多时候我们并不想要客户端通过阅读文档知道我们真是的方法名、类名、参数名等
import javax.jws.WebMethod;
import javax.jws.WebParam;
import javax.jws.WebResult;
import javax.jws.WebService;
import javax.xml.ws.Endpoint;
@WebService(serviceName="myService",
name="myHello",
targetNamespace="http://cn.zhanglei")
public class HelloWorld {
//服务器端方法
@WebMethod(operationName="sayGood")
@WebResult(name="helloResult")
public void SayHello(@WebParam(name="inputName")String name){
System.out.println("hello"+name);
}
public static void main(String[] args) {
//Endpoint方法发布一个服务
//@Params address,new 服务类
Endpoint.publish("http://192.168.1.103:8888/hello", new HelloWorld());
System.out.println("发布了一个服务.....");
}
}
注解后的WSDL文档截图:
大家看看标黑的部分即明白上面的注解了。
![](https://img-my.csdn.net/uploads/201301/08/1357629486_3405.jpg)
方法详情url:http://192.168.1.103:8888/hello?xsd=1
开始—cmd运用wsimport命令生成对象的java文件拷贝到客户端。调用代码如下:
MyHello mh =
new MyService().getMyHelloPort();
mh.sayGood("zhanglei");