WebService:
操作步骤:
1, 发布一个WebService
a. 写一个实现类
例如:
//使用注解注入serviceName:表示类名,portName:端口名称,name实现类名
@WebService(serviceName="TestWebService",portName="TestWebServiceInstance",name="TestWebServiceImpl")
public class TestWebServiceImpl{
@WebMethod(operationName="sayHello")//操作的方法名
//@WebParam(name="content")参数名称
public String sayHi(@WebParam(name="content") String content) {
System.out.println("TestWebServiceImpl"+content);
return "访问成功...";
}
}
//发布类
class WSClient {
static void main(String[] args) {
Endpoint.publish("http://127.0.0.1:9001/webservice",new TestWebServiceImpl() );
out.println(发布成功........");
}
2, 使用WS Explorer调用这个WebService
a. 打开myeclips菜单栏中的window-à参数(preferenece)---à搜索(tcp)--à点击TCP/IP monitor---à编辑(edit)
-----à填写 本地监听端口号(location monitoring port:),即在访问时使用的端口号,如9005, 主机号(localhost: 填写本地主机即可), 端口号: 填写需要代理的端口号:如:9000, 协议,选择TCP/IP -à启动(start)-àok
b.点击菜单栏中 soap Web service Explorer --à输入url地址(及访问地址, 如: http://127.0.0.1:9004/webservice?wsdl) 点击方法名---à点击add添加参数 ---à点击go
3,配置TCP/IP Monitor监控发送的数据。
a 点击window中的显示视图项(show view)--àother--搜索添加的监视器(TCP/IP MONITOR).
4,使用wsimport+生成的类调用这个WebService.
a. 使用命令wsimport进行生成java类中的代码, 首先查看环境是否正确(即该命令是否能直接访问) à如果不可以在环境中配置----à在dos控制台输入: wsimport, 查看输入方式: 如:
wsimport -s . -p cn.web.clientTest http://127.0.0.1:9000/webservice?wsdl ---à此时会出现,解析wsdl,
-s:表示目录 .点表示当前目录,-p : 表示包名, 最后为访问地址
b. 将生成的代码放入工程中, 写一个类 ,通过主函数调用过程:
public class LocalHostTest {
static void main(String[] args) {
String str = new TestWebService().getTestWebServiceInstance().sayHello("本地主机号实验!");
System.out.println(str);
}
}
A. 调用主函数执行,或者在浏览器中直接访问地址也可以.在浏览器中会出现xml格式的文档,该文档中主要描述的时测试类的信息,如: 类名,方法,参数,返回值等.
操作过程中出现的异常: 常见的有绑定异常: 主要是端口被占用, 关闭服务从新部署即可
webService 中常用的注解:
@WebService
标注要暴露为Web Services的类或接口 ,用于修饰类或接口,包含的属性有:
targetNamespace属性:
定义命名空间,默认为”http://”+”包名倒排”
name属性
wsdlLocation属性
描述服务的预定义 WSDL 的位置
endpointInterface属性
定义服务抽象 Web Service 协定的服务端点接口的完整名称
@webmethod:
action属性
操作的活动
operationName属性
exclude属性
如果所有方法上都没有指定@WebMethod,则默认是所有的方法都是对外暴露的方法。如果有任一方法指定了@WebMethod,则只有指定这个注解的才是对外暴露的方法。
@webresult:
@WebResult 定义返回值,返回值类型不能为接口类或抽象类,而且必须有个不带参的构造函数,包含属性
返回值的名称
partName属性
表示此返回值的 wsdl:part 的名称
targetNamespace属性
返回值的 XML 名称空间
header属性
如果为 true,则结果是从消息头而不是消息正文获取的
@webparm
@WebParam 定义方法的参数,参数类型不能为接口类或抽象类,而且必须有个不带参的构造函数,包含属性
参数名称
表示此参数的 wsdl:part 的名称
参数的 XML 名称空间
mode属性
参数的流向(IN、OUT 或 INOUT 之一)
@SoapBinding:
@SOAPBinding 定义Web Service 在SOAP中的消息协议,用于申修饰类或接口,包含的属性有:
style属性:
定义消息的编码类型,有两种类型的soap通信风格:Document和RPC。
Document:
坚持定义良好的契约,典型通过xml schema创建,schema指定了消息的格式对于获得更好的可交互性的ws来说Document literal是首选。
RPC(Remote Prcedure call):
表示SOAP消息的body包含方法的xml表示,为了(反)序列化方法参数,SOAP规范定义了一系列编码规则。RPC主要用于传统的同SOAP encoding规则的协同,组合是指RPC/encoded。不过也可以有RPC/literal通信风格(不需要有任何编码格式),但依然限制RPC基于方法的通信,此种情况下文档无法进行检验因为没有schema定义。RPC风格的ws有很多交互问题。
use属性
定义消息的格式化类型。(通信风格)作为SOAP绑定定义在wsdl文档中。SOAP绑定可以是encoded用法和literal用法:encoding指消息会以某些格式进行编码。literal指纯文本,没有任何逻辑编码。
WSDL:
全称是Web Services Description Language(Web服务描述语言),是一种基于XML格式的、关于Web服务的描述语言。
主要描述的时web服务与通信之间的xml语言,提供了web服务的相关内容, 如: 提供的借口, 方法名,参数类型,'Microsoft Yahei'; font-size:14px; line-height:22px"> SOAP:
全称是Simple Object Application Propotol(简单对象访问协议),是一种轻量的、简单的、基于 XML 的协议。他是一种标准化的传输消息的XML消息格式,是WebService的标准通信协议。
uddi:
全称是Universal Description,discovery and Integration(可译为“统一描述、发现和集成协议”或“通用描述、发现与集成服务”)。uddi是一种目录服务,企业可以使用它对Web Services进行注册和搜索。 uddi是一个分布式的互联网服务注册机制,它集描述(Universal Description)、检索(discovery)与集成(Integration)为一体,其核心是注册机制。
使用CXF发布webservice
1.导入jar包
2.写一个实现类
3.发布信息
例如:
1.实现类
"orderservice",255); font-size:10pt">"orderServiceImpl")
class OrderServiceImpl implements OrderService{
@WebMethod
public String findAll("name")String name) {
.......");
调用成功"+name;
}
2/发布信息
class CXFServiceTest {
JaxWsServerfactorybean factory = new JaxWsServerfactorybean();
factory.setAddress("http://127.0.0.1:9006/Service");//发布地址
factory.setServiceBean(new OrderServiceImpl());//发布的实现类
factory.create();发布信息
.....");
}
使用CXF的wsdl2java生成客户端代码并调用
wsdl2java -d . -p cn.itcast.ws http://127.0.0.1/ws2?wsdl
使用普通类发布webservice
class OrderServiceImpl2 public String findAll(String name) {
2.发布信息
Serverfactorybean factory = new Serverfactorybean();
"http://127.0.0.1:9006/OrderService");//发布地址
new OrderServiceImpl2());//发布的实现类
不使用注解方式发布webservice");
HTTPClinet:
class CxfRSClient{
@Test
void testGet() throws Exception{
HttpUriRequest request = new HttpGet("http://127.0.0.1/product/32sdfj");
HttpClient client = new DefaultHttpClient();
HttpResponse response = client.execute(request);
InputStream in = response.getEntity().getContent();
BufferedReader reader = new BufferedReader(new InputStreamReader(in,"UTF-8"));
if(response.getEntity()!=null){
String line;
while((line=reader.readLine())!= System.out.println(line);
}
}
//发布信息
public class CxfRSTest{
static void main(String[] args) {
JAXRSServerfactorybean factory = new JAXRSServerfactorybean();
factory.setAddress("http://127.0.0.1");
factory.setServiceBean(new ProductServiceImpl());
factory.create(); // 发布服务
System.out.println("RSService --发布成功........");
}
}
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。