Web Service 开发系列文章之二(一些SOAP相关的内容)
Web Service 学习第二期
1、对SOAP的观察和理解
1.1、使用Eclipse的Web Service Explorer
选择JavaEE视图 ,如果没有则选择:windowàOpen Perspective à Other
点击 和左边的
输入服务的URL
点击go
点击add 输入参数
下面显示soap消息
1.2、基于SOAP的通信方式和基于JAX-WS的通信方式
1.2.1、初步区别
基于JAX-WS
JAX-WS封装了SOAP Java的API自动将Java代码转换成了SOAP消息然后将SOAP请求消息发送个服务器。Java将要通信的对象自动转化成消息了。
基于SOAP的
其实也可以直接写一个消息发送给服务器(下面红框中的消息)
1.2.2、实施
新建Java项目 新建包
(1) 创建服务接口
package org.decarl.soap.service;
import javax.jws.WebParam;
import javax.jws.WebResult;
import javax.jws.WebService;
@WebService(targetNamespace="http://decarl.soap.org/webservice")
public interface IMyService {
@WebResult(name="addResult")
public int add(@WebParam(name="a") int a,
@WebParam(name="b") int b);
}
注意:一个很重要的问题
此服务发布后的WSDL的targetNamespace依旧是根据包生成的命名空间 targetNamespace=http://service.soap.decarl.org/
当@WebService(targetNamespace="http://decarl.soap.org/webservice")中指定的targetNamespace与包名不同时会将WSDL分成两个
在上图中的红框下面一句就是导入的自己在@WebService(targetNamespace="http://decarl.soap.org/webservice")
中指定的命名空间
(2) 创建服务接口实现类
package org.decarl.soap.service;
import javax.jws.WebService;
//指明服务端接口是谁
@WebService(endpointInterface="org.decarl.soap.service.IMyService")
public class MyServiceImpl implements IMyService {
@Override
public int add(int a, int b) {
System.out.println("a + b = " + (a + b));
return a + b;
}
}
(3) 创建服务类
package org.decarl.soap.service;
import javax.xml.ws.Endpoint;
public class MyServer {
public static void main(String[] args) {
Endpoint.publish("http://localhost:8989/ms", new MyServiceImpl());
}
}
1.2.3、SOAP结构