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

WebService:CXF发布Web项目

发布时间:2020-12-16 22:27:33 所属栏目:安全 来源:网络整理
导读:l 由于 cxf 的 web 项目已经集成了 Spring 所以, cxf 的服务类都是在 spring 的配置文件中完成的。以下是步骤: l 第一步:建立一个 web 项目。 l 第二步:准备所有 jar 包。将 cxf_home lib 项目下的 所有 jar 包 全部 copy 到新项目的 lib 目录下,里面
l 由于 cxf web 项目已经集成了 Spring 所以, cxf 的服务类都是在 spring 的配置文件中完成的。以下是步骤:
l 第一步:建立一个 web 项目。
l 第二步:准备所有 jar 包。将 cxf_home lib 项目下的所有 jar 全部 copy 到新项目的 lib 目录下,里面已经包含了 spring3.0 jar 包。
l 第三步:在 web.xml 中配置 cxf 的核心 servlet CXFServlet
l 第四步:创建 ( 最好是 Copy)cxf-servlet.xml 文件。这是一个 spring 的配置文件。


在web.xml中配置

<?xmlversion="1.0" encoding="UTF-8"?>

<web-appversion="2.5" xmlns="http://java.sun.com/xml/ns/javaee"

? xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"

? xsi:schemaLocation="http://java.sun.com/xml/ns/javaee

? http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd">

? <servlet>

? <!-- 配置cxf -->

? <servlet-name>cxf</servlet-name>

? <servlet-class>org.apache.cxf.transport.servlet.CXFServlet</servlet-class>

? <init-param>

? <!-- 配置Spring的配置文件,默认就是这儿 -->

? <param-name>config-location</param-name>

? <param-value>/WEB-INF/cxf-servlet.xml</param-value>

? </init-param>

? <load-on-startup>1</load-on-startup>

? </servlet>

? <servlet-mapping>

? <servlet-name>cxf</servlet-name>

? <url-pattern>/ws/*</url-pattern>

? </servlet-mapping>

? <welcome-file-list>

? <welcome-file>index.jsp</welcome-file>

? </welcome-file-list>

</web-app>



cxf-servlet.xm

<?xmlversion="1.0" encoding="UTF-8"?>

<beansxmlns="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/jaxrshttp://cxf.apache.org/schemas/jaxrs.xsd

??????????? http://cxf.apache.org/jaxwshttp://cxf.apache.org/schemas/jaxws.xsd

??????????? http://cxf.apache.org/corehttp://cxf.apache.org/schemas/core.xsd">

? <!-- 引入CXFBean定义如下,早期的版本中使用,

导入的三个配置文件都在cxf.jarMETA文件夹中

-->

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

? <import resource="classpath:META-INF/cxf/cxf-extension-soap.xml"/>

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

? <!-- 直接发布一个类,无接口 -->

? <jaxws:endpointid="one" implementor="cn.itcast.ws1.OneService"

? address="/one">

? </jaxws:endpoint>

? <!-- 发布一个服务,没有指定接口 --

<!-- 声明方式说明:

??????? serviceClass:必须为一个接口,

??????? ? ???????????并在接口上必须使用@WebService注解否则调用时会抛出异常

?? ? ????serviceBean:是实际服务的类,必须是serviceClass的子类

?? ? ????? ???????此类上面即可以使用@WebService注解,也可以不使用

?? ? ????address:访问地址,省去前面的ip:port.

?? ? ????????注意在此注册的类,必须要添加@WebService的注解

??? -->


>

? <jaxws:serverid="two" address="/two" serviceClass="cn.itcast.ws2.ITwoService">

? <jaxws:serviceBean>

? <!-- 指定发布类,下面类必须添加@WebService注解 -->

? <beanclass="cn.itcast.ws2.TwoServiceImpl"></bean>

? </jaxws:serviceBean>

? </jaxws:server>

</beans>


l http://localhost:9999/cxf_spring/ws


CXFServlet

l CXFServlet 类,通过读取 config -location 的配置项读取 cxf-servlet.xml 配置文件。并在内部读取自己的配置文件 cxf.xml 文件。
l CXFServlet 读取配置文件后,将文件信息全部读取到 ApplicationContext Spring 类中。
以下是它的源代码:




添加 拦截器

<!-- 声明方式说明:

??????? serviceClass:必须为一个接口,

?????????????????? 并在接口上必须使用@WebService注解否则调用时会抛出异常

?????? serviceBean:是实际服务的类,必须是serviceClass的子类

????????????? 此类上面即可以使用@WebService注解,也可以不使用

?????? address:访问地址,省去前面的ip:port.

?????????? 注意在此注册的类,必须要添加@WebService的注解

??? -->

?? <jaxws:server id="one"

??????????? serviceClass="cn.one.IOneService"

??????????? address="/one">

?? <jaxws:inInterceptors>

?? <bean class="org.apache.cxf.interceptor.LoggingInInterceptor"></bean>

?? </jaxws:inInterceptors>

?? <jaxws:outInterceptors>

?? <bean class="org.apache.cxf.interceptor.LoggingOutInterceptor"></bean>

?? </jaxws:outInterceptors>

?? <jaxws:serviceBean>

?? <bean class="cn.one.OneService"></bean>

?? </jaxws:serviceBean>

?? </jaxws:server>



客户端调用

l 使用纯 Java 项目调用
? 1 、根据客户端生成的代码来调用。(优选这种方式)
? 请先生成然后在任意的 Java 项目中调用 。
? 2 、客户端只拥有一个接口,使用 JaxWsProxyFactoryBean 来调用。
? 因为以下使用了 JaxWsProxyFactoryBean , 所以,仍然需要 CXF 的环境,而使用此环境就会造成 Jar 文件的大量冗余,所以大家要谨慎选择。

JaxWsProxyFactoryBean client =

newJaxWsProxyFactoryBean();

client.setAddress("http://localhost:7777/xcxf2_web/ws/one");

client.setServiceClass(IOneService.class);

IOneService one = client.create(IOneService.class);

String ss = one.sayHi("OK你好");

System.err.println(ss);

Spring项目中,通过配置文件调用

? 新建立一个 Java 项目,并加载 cxf 的所有包。
? 只需要生成的接口文件。
? classpath 下新建立一个 ClientBeans.xml 文件 .
?
? 优点与缺点:
? 此种情况,适合于一个 Javaweb 项目已经集成了 Spring 。并希望通过 CXF 配置的方式调用 Web 服务。
? 此种情况,仍然需要导入 CXF 的大量 jar 包。
? 这种情况也存在一定人优点,如可以将外部的 Web 服务通过配置文件注入 (DI) Action 类中。



1、说明:IHelloWorld.java是通过wsimport生成的接口,我们只需要这个接口。

2CxfJavaClient.java包含main方法,用于通过ClientBeans.xml文件,调用WebService

3、源代码:

package com.itcast.cxf.first;

import javax.jws.WebService;

/**

?* 如果没有改变包名的情况下,可以只使用@WebService注解。

?* 如果修改了包名则应该使用

?* @WebService(name="IHelloWorld",targetNamespace="http://wj.com")

?* 所以,对于此类,仍然建议使用wsimportwsdl2java生成。

?* (仅需要此接口,其他类,不需要)

?* @author wangjianme

?*

?*/

@WebService

publicinterface IHelloWorld {

??? public String sayHello(Stringname);

}


以下是ClientBeans.xml的文件的源代码:

<?xmlversion="1.0" encoding="UTF-8"?>

<beansxmlns="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/jaxrshttp://cxf.apache.org/schemas/jaxrs.xsd

??????????? http://cxf.apache.org/jaxwshttp://cxf.apache.org/schemas/jaxws.xsd

??????????? http://cxf.apache.org/corehttp://cxf.apache.org/schemas/core.xsd">

? <jaxws:client??? id="helloClient"

? ?? ?address="http://127.0.0.1:9999/cxf2.4_spring_web/ws/helloworld"

? ?? ? serviceClass="com.itcast.cxf.first.IHelloWorld">

? </jaxws:client>

</beans>

1、以下是CxfJavaClient.java的源代码:

package com.itcast.cxfweb.java.client;

import org.springframework.context.ApplicationContext;

importorg.springframework.context.support.ClassPathXmlApplicationContext;

import com.itcast.cxf.first.IHelloWorld;

/**

?* Java项目的客户端

?* @author wangjianme

?*/

publicclass CxfJavaClient {

? public static void main(String[] args) {

? //读取配置文件

? ApplicationContextctx =

? new ClassPathXmlApplicationContext("ClientBeans.xml");

? //get到接口类型并调用

? IHelloWorld hello =(IHelloWorld)ctx.getBean("helloClient");

? String str = hello.sayHello("WJ");

? System.err.println(str);

? }

}

(编辑:李大同)

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

    推荐文章
      热点阅读