CXF WebService

有两种方式用 CXF 写 WebService
1、JAVA FIRST
      即先写java类,然后通过javax.ws包的注解将java类发布为WebService
2、WSDL FIRST
      先写WSDL文件描述,然后用CXF的wsdl2java工具生成WebService的java类,最后加入业务逻辑

javax.xml.ws 包

javax.xml.ws包在JAVA 6中被正式引入到J2SE版本中,在JAVA5的时候,还是作为J2EE中的内容。

javax.xml.ws被包含在CXF的geronimo-jaxws_2.1_spec-1.0.jar包中

1、该包中的 javax.xml.ws.BindingType 注解可以用来配置WSDL文件中 <wsdl:binding>部分的<soap:binding>,BindingType 可选值有以下几种:SOAPBinding.SOAP11HTTP_BINDING, SOAPBinding.SOAP12HTTP_BINDING, HTTPBinding.HTTP_BINDING
当 BindingType 的值为 SOAPBinding.SOAP12HTTP_BINDING 时,生成的WSDL中<wsdl:binding>的内容如下:<wsdl:binding ... ><soap12:binding ...>

BindingType 用来修饰 WebService接口的实现类

2、javax.jws包

javax.jws包要注意以下注解
1、WebMethod 用来注解WebService接口要向外公开的方法。
只有被标注为 WebMethod 的方法,才会公开给外部访问。

2、WebParam 用来注解上述所讲的方法的参数,该注解的 name 属性对应于WSDL中相应方法的参数的name属性

WebParam.Mode 属性用来指定?

3、WebResult 用来注解上述所描述的方法的返回值,该注解的 name 属性对应于WSDL中相应方法返回值的name属性

4、WebService 用来对类和接口进行注解。当接口和其实现类被WebService注解之后才能成为一个WebService。
endpointInterface 属性,一般都作用于接口的实现类上,且其值就是该实现类的接口的全路径。
name 属性用来指定 WebService的name,
对应于<wsdl:definitions>的name属性

serviceName 属性用来做指定公开的WebService的服务名,对应于WSDL中 <wsdl:service> 的name

portName 属性用来指定WSDL中生成出来的
<wsdl:port>的name属性

wsdlLocation 属性用来指定WebService类所匹配的WSDL文件的路径,如果不指定这个,那么通过WebserviceName?wsdl生成出来的wsdl是CXF自己产生的,如果指定了,那么通过WebserviceName?wsdl生成的wsdl就是wsdlLocation 所指向的文件的内容
以上属性全作用于类和接口上

targetNamespace 用来指定WebService的WSDL的 targetNamespace 属性,该属性可以用于接口和类上,也可以作用于endpoint 上

JAXB :javax.xml.bind 包

javax.xml.bind包用来提供将java bean和xml之间进行转换的支持。

通过 JAXB 中的 Marshaller 和 Unmarshaller 可以将xml和java bean 进行转换

 

  • Web 服务端点

 

javax.xml.ws.Endpoint

使用在此类中定义的静态方法创建端点。一个端点总是绑定到一个 Binding 和一个实现者,这两项都是在创建端点时设置的。

端点要么处于已发布状态,要么处于未发布状态。可以使用 publish 方法开始发布端点,此时端点开始接受传入请求。相反,可以使用 stop 方法停止接受传入请求并取消端点。一旦停止,就不能再次发布该端点。

可以在端点上设置 Executor 以便更好地控制用来指派传入请求的线程。例如,通过创建ThreadPoolExecutor 并向端点注册可以启用带有特定参数的线程池。

处理程序链可以使用所含的 Binding 来设置。

端点可以使一个元数据文档(如 WSDL 和 XMLSchema 文档)列表与之绑定。发布时,JAX-WS 实现将根据实现者上存在的注释,尽可能多地重用这些元数据,而不是生成新的元数据。

例:

Endpoint.publish(address, new UniverseBusImpl());

 

  • 建立webservice步骤

1. 新建一个JAVA project.
2. 新建一个Hello.java,代码如下:

package study.jdk6ws;
import javax.jws.WebMethod;
import javax.jws.WebService;
import javax.jws.soap.SOAPBinding;
@WebService(targetNamespace ="http://jdk6ws.study/client")
@SOAPBinding(style = SOAPBinding.Style.RPC)
public class Hello {
 @WebMethod
 public String sayHello(String name) {
  return "OK, " + name;
 }
}


3. 新建一个发布这个服务的启动程序(StartService.java),代码如下:

package study.jdk6ws;
import javax.xml.ws.Endpoint;
public class StartService {
 public static void main(String[] args) {
  Endpoint.publish("http://localhost:8080/HelloService", new Hello());
  System.out.println("Success");
 }
}


4. 运行这个应用程序: StartService
5. 打开浏览器,输入: http://localhost:8080/HelloService?wsdl
可以看到相应的wsdl描述:

 

另若有接口及其实现类:

第二步中:

接口中

import javax.jws.WebService;
@WebService
public interface UniverseBusInterface {
 public Message busSynExecuteMessage(Message message) throws Exception;
 public boolean autoBusRegister(AliveBus ab);
 
 public void busAsynExecuteMessage(Message message);
 
 public void busAsynExecuteResult(Message message);
 public String checkBus();
}


实现类中

import javax.jws.WebMethod;
public class UniverseBusImpl implements UniverseBusInterface {
@WebMethod
 public void busAsynExecuteMessage(final Message message) {
。。。。。。}
。。。。。。
}


发布程序中

import javax.xml.ws.Endpoint;
public class BusLaucher {
private static void startServer(String address)
 {
  Endpoint.publish(address, new UniverseBusImpl());
 }
。。。。。。
}





转载地址:http://blog.csdn.net/doriswang1986/article/details/5841339

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值