加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 服务器 > 安全 > 正文

CXF WebService

发布时间:2020-12-17 00:20:12 所属栏目:安全 来源:网络整理
导读:有两种方式用 CXF 写 WebService 1、JAVA FIRST ????? 即先写java类,然后通过javax.ws包的注解将java类发布为WebService 2、WSDL FIRST ????? 先写WSDL文件描述,然后用CXF的wsdl2java工具生成WebService的java类,最后加入业务逻辑 javax.xml.ws 包 javax.

有两种方式用 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

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读