简单的CXF实例

用cxf写一个简单的手机号查询案例

首先需要下载 CXF  

下载地址 http://cxf.apache.org/download.html

Source distribution  是带源码的压缩包  我们选择Binary distribution 中压缩包就可以

下载之后需要配置cxf环境

新建  CXF_HOME   地址  E:apache-cxf-2.7.7

Path   %CXF_HOME%in;

配置好环境变量之后   cmd  输入 wsdl2java -h  如果不报错 恭喜你,cxf配置成功

1.利用cxf访问其他系统接口

新建一个javaweb项目  webserviceTest

然后利用 CXF 生成客户端 

 命令行  进入 项目的src文件夹  输入  wsdl2java -p com.example.client.mobile -encoding utf-8 http://ws.webxml.com.cn/WebServices/MobileCodeWS.asmx?WSDL

-p 是生成代码时直接的文件路径  -encoding 指定编码格式  后面为wsdl 地址

如果报错 

Exception in thread "main" java.lang.AssertionError: org.xml.sax.SAXParseExcepti
on; systemId: jar:file:/E:/apache-cxf-2.7.7/lib/jaxb-xjc-2.2.6.jar!/com/sun/tool
s/xjc/reader/xmlschema/bindinfo/binding.xsd; lineNumber: 52; columnNumber: 88; s
chema_reference: 由于 accessExternalSchema 属性设置的限制而不允许 'file' 访问,
因此无法读取方案文档 'xjc.xsd'。

那就因为 jdk8 跟 cxf 2.7.7 版本不兼容 

解决方法 1 在jre/lib下 新建一个 jaxp.properties  内容   javax.xml.accessexternalschema =all

解决方法 2 更好CXF版本  下载3.0的版本

生成客户端的目录为

建一个测试类  MobileTest

public class MoblieTest {
public static void main(String[] args) {

//创建web服务代理工厂 
JaxWsProxyFactoryBean bean = new JaxWsProxyFactoryBean();

//设置要调用的web服务服务端发布地址 
bean.setAddress("http://ws.webxml.com.cn/WebServices/MobileCodeWS.asmx?WSDL");

//设置要调用的web服务
bean.setServiceClass(MobileCodeWSSoap.class);

//创建web服务对象 
MobileCodeWSSoap soap = (MobileCodeWSSoap) bean.create();

//通过对象调用web服务的方法 
String resutl = soap.getMobileCodeInfo("15888888888", "");
System.out.println(resutl);
}
}

 运行结果为 15888888888:浙江 杭州 浙江移动全球通卡

2.  自己创建一个webservice

首先新建一个javaweb项目  webserviceTest

(1)配置web.xml

<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns="http://java.sun.com/xml/ns/javaee"
xsi:schemaLocation="http://java.sun.com/xml/ns/javaee
http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd" id="WebApp_ID" version="3.0">
<display-name>webserviceTest</display-name>

  <!--这个标签的主要作用是  在项目启动之前,先运行。例如要加载数据库等,就可以在这里配置-->

<context-param>
<param-name>contextConfigLocation</param-name>
<param-value>
/WEB-INF/applicationContext.xml
</param-value>
</context-param>


<listener>
<listener-class>
org.springframework.web.context.ContextLoaderListener
</listener-class>
</listener>

<servlet>
<servlet-name>CXFServlet</servlet-name>
<servlet-class>
org.apache.cxf.transport.servlet.CXFServlet
</servlet-class>
<load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>CXFServlet</servlet-name>
<url-pattern>/*</url-pattern>
</servlet-mapping>

</web-app>

(2)  新增一个接口 HelloWorld  并增加实现类 HelloWorldImpl

package com.example.services;

import javax.jws.WebService;

@WebService
public interface HelloWorld {
void sayHello(String name);
}

package com.example.services.impl;

import com.example.services.HelloWorld;

public class HelloWorldImpl implements HelloWorld {

@Override
public void sayHello(String name) {
System.out.println("hello world "+name);
}

}

(3)添加cxf的配置  在WEB-INF目录下新建一个applicationContext.xml

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:jaxws="http://cxf.apache.org/jaxws"
xmlns:jaxrs="http://cxf.apache.org/jaxrs" xmlns:cxf="http://cxf.apache.org/core"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans.xsd
http://cxf.apache.org/jaxrs http://cxf.apache.org/schemas/jaxrs.xsd
http://cxf.apache.org/jaxws http://cxf.apache.org/schemas/jaxws.xsd
http://cxf.apache.org/core http://cxf.apache.org/schemas/core.xsd">

<import resource="classpath:META-INF/cxf/cxf.xml" />
<import resource="classpath:META-INF/cxf/cxf-servlet.xml" />

<!-- service -->
<bean id="helloWorld" class="com.example.services.impl.HelloWorldImpl"></bean>

<!--
发布服务
使用jaxws:server和jaxws:endpoint可以发布服务
WebService地址=Tomcat地址值+CXF Servlet的路径+ /weather
-->
<jaxws:server address="/hello" serviceClass="com.example.services.HelloWorld">
<jaxws:serviceBean>
<ref bean="helloWorld"/>
</jaxws:serviceBean>
</jaxws:server>

</beans>

启动项目  访问 http://localhost:8080/webserviceTest

接口生成成功

原文地址:https://www.cnblogs.com/zjf6666/p/9558571.html