WebService CXF调用方式《三》

问题?WebService CXF调用方式《三》,CXF工作原理和调用方式

一、CXF是什么?

Apache CXF是一个开源的,全功能的,容易使用的Web服务框架。CXF是两个项目的结合:由IONA技术公司(现在是Progress的一部分)开发的Celtix和由Codehaus主持的团队开发的XFire,合并是由人们在在Apache软件基金会共同完成的。CXF的名字来源于"Celtix"和"XFire"的首字母。

二、CXF有什么作用?

Apache CXF Web 服务堆栈是来自 Apache Software Foundation 的另一替代选择,Axis2 堆栈也来自同一组织。尽管它们来自同一组织,Axis 2 和 CXF 就如何配置和交付 Web 服务采用完全不同的方法。总的来说,CXF主要是用来交付WebService的。

三、CXF怎么用?

1.下载包

用CXF是需要用到jar包和相关依赖包的,下载地址cxf:
官方下载

要下载两个zip包:

解压3.1.6.ZIP包

2.pom.xml

<dependencies>
        <dependency>
            <groupId>org.apache.cxf</groupId>
            <artifactId>cxf-rt-frontend-jaxws</artifactId>
            <version>3.0.2</version>
        </dependency>
        <dependency>
            <groupId>org.apache.cxf</groupId>
            <artifactId>cxf-rt-transports-http</artifactId>
            <version>3.0.2</version>
        </dependency>
        <!-- Jetty is needed if you're using the CXFServlet -->
        <dependency>
            <groupId>org.apache.cxf</groupId>
            <artifactId>cxf-rt-transports-http-jetty</artifactId>
            <version>3.0.2</version>
        </dependency>
</dependencies>

3.ServerFactoryBean

新建WebService工程,D:\javaenv\all_jar\apache-cxf-3.0.2\lib相关的依赖包,和spring框架直接整合,全部导入服务工程中,BuiledPath,并发布服务

package com.itcast.service;

import org.apache.cxf.frontend.ServerFactoryBean;

public class HelloService {
	/*
	 * jdk形式
	 * 1.利用EndPoint.public(address,Class)
	 * 2.加上公开方法
	 * 3.加上@WebService
	 *
	 * 使用CXF方式
	 * 1.ServerFactory创建发布对象,并设置属性值
	 * 2.server.create()发布服务
	 */
	public String VisitService(String name){
		System.out.println("InTO Service:"+name);
		System.out.println("InTO Service:"+name);
		System.out.println("InTO Service:"+name);
		System.out.println("InTO Service:"+name);
		return "Return Result:"+name;
	}
	 public static void main(String[] args) {
		 /*
		  * 使用CFX的形式
		  */
		 //1.FactoryBean
		 ServerFactoryBean bean = new ServerFactoryBean();
		 //2.设置访问地址
		 bean.setAddress("http://localhost:9090/hello");//192.168.1.6
		 //3.设置实现类或者接口
		 bean.setServiceClass(HelloService.class);
		 //4.创建服务
		 System.err.println("开启CXF服务!");
		 bean.create();
		 //5.停止服务
	}
}

开启服务:

访问:http://localhsot:9090/hello出现500错误

在IE浏览器中该出现500内部错误,是因为CXF没有WebService总的预览界面了,它不像jdk的形式有这种总得WebService预览给你看,不过这不重要。

但是访问http://localhsot:9090/hello?wsdl描述文件就看得到

4.Axis2 WebService框架 jax rpc / CXF基于jaxws标准

现在的CXFWebService框架就是在Axis WebService框架之后出来的。Jaxws是在jax rpc这个标准之后推出来,这个标准更好一点儿。

JaxWsServiceFactoryBean方式,其实就是创建服务对象的时候不同,再加上一个@WebService,其他的都CXF一样

建立服务类,跟CXF一样,只是它用的是JaxWsServiceFactoryBean方式

@WebService
public class a {
	private void mian() {
		// 1.JaxWserviceFactoryBean方式
		JaxWsServiceFactoryBean bean = new JaxWsServiceFactoryBean();
		 //2.设置访问地址
		 bean.setAddress("http://localhost:9090/hello");
		 //3.设置实现类或者接口
		 bean.setServiceClass(HelloService.class);
		 //4.创建服务
		 System.err.println("开启CXF服务!");
		 bean.create();
		 //5.停止服务
	}
}

以上两种方式可以看出以上与JDK不同的方式了吧!

5.ServerFactoryBean和JaxWsServerFactoryBean的差异

ServerFactoryBean无需写@WebService注解。其他调用方式基本一样

因为wsimport –s .  ******:这个命令只支持SAOP1.1版本的,想要支持高版本的,可以用wsdl2java命令

wsdl2java命令:

只有java文件

C:\>wsdl2java -d . http://localhost:9090/hello?wsdl

有java和class文件

C:\>wsdl2java -d . -compile http://localhost:9090/hello?wsdl

注释:命令行中的中文句号,用英语的点代替

剩下的就是客户端调用和JDK是一样的,打包复制调用测试

6.用JaxWsServiceFactoryBean做面向接口的webservice服务******:

接口:

package com.itcast.jaxws;

import javax.jws.WebMethod;
import javax.jws.WebParam;
import javax.jws.WebResult;
import javax.jws.WebService;
import javax.xml.ws.BindingType;
import javax.xml.ws.soap.SOAPBinding;

@WebService(serviceName="HelloService",targetNamespace="http://com.itcast.jaxws/")
@BindingType(SOAPBinding.SOAP12HTTP_BINDING)//实现SOAP1.2
public interface IHelloService {

	@WebMethod(operationName="sayhello")
	@WebResult(name="Msage")
	public abstract String sayH(@WebParam(name="name")String name);

}

实现类:

package com.itcast.jaxws;

import org.apache.cxf.interceptor.LoggingInInterceptor;
import org.apache.cxf.jaxws.JaxWsServerFactoryBean;

public class HelloService implements IHelloService {

	/* (non-Javadoc)
	 * @see com.itcast.jaxws.IHelloService#sayH(java.lang.String)
	 */
	public String sayH(String name){
		System.out.println("进入服务逻辑处理:"+name);
		return "访问服务方法:"+name;
	}
	/*
	 * JaxWsFactoryBean方式
	 *
	 */
	public static void main(String[] args) {
		 //1.FactoryBean
		 JaxWsServerFactoryBean bean = new JaxWsServerFactoryBean();
		 //2.设置访问地址
		 bean.setAddress("http://localhost:9090/hello");
		 //3.设置实现类或者接口
//		 bean.setServiceClass(HelloService.class);//面向类的服务
		 bean.setServiceClass(IHelloService.class);//面向接口的
		 bean.setServiceBean(new HelloService());
		 //因为是面向接口的服务,需要实例化,不然客户端调用的时候会出现没有实例的错误
		 //监听日志输入输出调用
		 bean.getInInterceptors().add(new LoggingInInterceptor());
		 bean.getOutInterceptors().add(new LoggingInInterceptor());
		 //4.创建服务
		 System.err.println("开启CXF服务!");
		 bean.create();
		 //5.停止服务
	}
}

开启服务,当然也监听日志:

打包到客户端,并且把服务端代码复制,调用接口服务

四、其它

1.如果监控多个公司调用提供WebService,怎样知道是哪个公司调用

WebService安全性,先要验证,在WebService提供login方法。设定username用户名,设定password密码。

调用所有业务方法前,必须先通过它来验证

2.修改为SOAP1.2协议

MTOM 传输二进制文件,用SAOP1.2的话,就用选着第三个版本

3.SOAP1.1和SOAP1.2区别

(1)命名空间

(2)标签变化

Myeclipse WebService explor不能支持SOAP1.2

在开发中如果使用SOAP1.2实现WebService,在生成本地调用代码时,应该使用CXF提供wsdl2java命令。如果使用SOAP1.1实现WebService,在生成本地调用代码时,应该使用jdk提供wsimport命令。

在实际项目中目前尽量使用SOAP1.1版本

五、总结

总结未完,慌啥呢?看下节

时间: 2024-10-12 12:28:49

WebService CXF调用方式《三》的相关文章

webservice 客户端调用方式对比

1.可以说成静态调用: 这种必须知道要调用接口的名称 2.动态调用,这种更灵活,根据wsdl文档,只需要知道方法名就行,

Webservice 调用方式整理

前一段时间搞webservice,简单的记录了一下几种经常使用的调用方式,供大家參考. Java proxy 1).用过eclipse的创建web service client来完毕 2).在eclipse里面new一个web service client,会提示输入一个wsdl地址. 3).输入地址后直接点完毕,会自己主动生成代码.该方式和手动编写是一样的. 眼下该方式还没通:会咨询一下RD. Wsdl: http://10.81.21.92:8080/MailAdmin/ws/mailBox

java实现WebService 以及客户端不同的调用方式

java 实现WebService 以及不同的调用方式 webservice:    就是应用程序之间跨语言的调用    wwww.webxml.com.cn    1.xml    2.    wsdl: webservice description language web服务描述语言        通过xml格式说明调用的地址方法如何调用,可以看错webservice的说明书        3.soap simple object access protoacl (简单对象访问协议)   

CXF 调用C#.net的WebService

原文链接:http://hi.baidu.com/pengfeiiw/blog/item/3203e29065aa3a8aa977a4d0.html 1.编写C#.net的WebService Service.cs using System;using System.Web;using System.Web.Services;using System.Web.Services.Protocols; [WebService(Namespace = "http://localhost:9000/we

CXF 调用 .net webservice

1.webservice 接口调用可参考jdk安装bin 下wsimport.exe. 2.本实例是CXF调用 .net webservice,且.net webservice接口参数是一个对象. 3.本实例调用的是文件上传,具体参数可忽略 package com.jr.entity.web; import java.io.BufferedInputStream; import java.io.File; import java.io.FileInputStream; import java.i

java 实现WebService 以及不同的调用方式

java 实现WebService 以及不同的调用方式 webservice:    就是应用程序之间跨语言的调用    wwww.webxml.com.cn    1.xml    2.    wsdl: webservice description language web服务描述语言        通过xml格式说明调用的地址方法如何调用,可以看错webservice的说明书        3.soap simple object access protoacl (简单对象访问协议)   

webservice的axis2客户端调用方式和xfire调用方式

1.axis2调用方式: package com.shine.fund; import javax.xml.namespace.QName; import org.apache.axis2.AxisFault; import org.apache.axis2.addressing.EndpointReference; import org.apache.axis2.client.Options; import org.apache.axis2.rpc.client.RPCServiceClien

Vue组件的三种调用方式

最近在写fj-service-system的时候,遇到了一些问题.那就是我有些组件,比如Dialog.Message这样的组件,是引入三方组件库,比如element-ui这样的,还是自己实现一个?虽然它们有按需引入的功能,但是整体风格和我的整个系统不搭.于是就可以考虑自己手动实现这些简单的组件了. 通常我们看Vue的一些文章的时候,我们能看到的通常是讲Vue单文件组件化开发页面的.单一组件开发的文章相对就较少了.我在做fj-service-system项目的时候,发现其实单一组件开发也是很有意思

SpringBoot2.0.2 Application调用的三种方式

一.注解 @SpringBootApplication            点开查看源码是由多个注解合成的注解,其中主要的注解有:            @SpringBootConfiguration            @EnableAutoConfiguration            @ComponentScan 三个关键的注解:             @ComponentScan 自动扫描加载进来的包,-----------可以扫描自动加载的bean            @E