java web项目(spring项目)中集成webservice ,实现对外开放接口

时间:2025-03-12 07:10:48

什么是WebService?webService小示例 点此了解

下面进入正题:

java web项目(spring项目)中集成webservice ,实现对外开放接口步骤:

更多java学习知识:请访问潘子夜的个人博客

准备:

采用与spring兼容性较好的cxf来实现

cxf 的  jar下载地址: /

选择zip格式下载,解压后的lib目录下的jar

需要最少的jar如下:

cxf-2.3.
geronimo-annotation_1.0_spec-1.1.
geronimo-jaxws_2.2_spec-1.
geronimo-stax-api_1.0_spec-1.0.
geronimo-ws-metadata_2.0_spec-1.1.
jaxb-api-2.2.
jaxb-impl-2.2.1.
neethi-2.0.
wsdl4j-1.6.
XmlSchema-1.4.
wstx-asl-3.2.

一:创建webservice服务器

1)创建一个服务接口

 
package ; import ; import ; @WebService public interface IHelloWorld { public String sayHello(@WebParam(name = "arg0") String text); }

 

2)是接口实现类

 

 
package ; import ; import ; @WebService(endpointInterface = "") public class HelloWorldImpl implements IHelloWorld { public String sayHello(String text) { return "Hello : " + text; } }

 

 

3)创建spring配置文件,将服务类加入到容器中

 

 

 
<?xml version="1.0" encoding="UTF-8"?> <beans xmlns="/schema/beans" xmlns:xsi="http:///2001/XMLSchema-instance" xmlns:p="/schema/p" xmlns:jaxws="/jaxws" xmlns:cxf="/core" xsi:schemaLocation="/schema/beans /schema/beans/spring-beans-2. /jaxws /schemas/"> <import resource="classpath*:META-INF/cxf/" /> <import resource="classpath*:META-INF/cxf/" /> <import resource="classpath*:META-INF/cxf/" /> <!--下面的class属性值一定要跟你项目中服务实现类的包路径完全一致--> <bean  class=""/> <jaxws:endpoint  implementor="#hello" address="/HelloWorld" /> </beans>

在中添加配置文件

 
<context-param> <param-name>contextConfigLocation</param-name> <param-value> /WEB-INF/ </param-value> </context-param>

 

4)在中加入cxf servlet

 

 
<servlet> <display-name>CXF Servlet</display-name> <servlet-name>CXFServlet</servlet-name> <servlet-class></servlet-class> <load-on-startup>1</load-on-startup> </servlet> <servlet-mapping> <servlet-name>CXFServlet</servlet-name> <url-pattern>/webservice/*</url-pattern> </servlet-mapping>

至此,webservice服务器就创建好了,

在浏览器中访问:http://localhost:8080/test/webservice/HelloWorld?wsdl,(test是项目名称)。如果出现了类似与

<wsdl:definitions xmlns:ns1="/" xmlns:soap="/wsdl/soap/" xmlns:tns="/" xmlns:wsdl="/wsdl/" xmlns:xsd="http:///2001/XMLSchema" name="HelloWorldImplService" targetNamespace="/">
。。。。

就配置成功了。

接下来贴几个运行时的错误解决方法

1:中提示, not found,我在上面写的路径是classpath*:META-INF/cxf/,这里的classpath后面还跟了一个“*”符号,没加符号表示只在类路径下查找文件,加了号表示不仅在类路径下查找xml文件,还在jar包中查找xml文件。所以当我们在项目类路径下没有假如等配置文件时,就一定要在classpath后加*,这样spring容器才会去所加入的jar包中找。

2:假如cxf servlet时,映射路径不要写成/*,否则会出现访问不了项目主页的情况,可以写成/webservice/*或者别的项目中没有使用过的路径来作为cxf servlet的请求路径。

 

二:创建webservice客户端

客户端可以和服务器放在同一个项目中用来测试,也可以新建一个java项目来进行测试。

新建一个Java项目测试时,要假如对应的jar包,跟服务器一样,使用spring还要假如spring jar包。

我在这里新建一个项目,依旧使用spring来测试

1)首先要创建一个和服务器端一样的服务接口,(如果客户端和服务器端在同一个项目中则可以省略这步)

 
package ; import ; import ; @WebService public interface IHelloWorld { public String sayHello(@WebParam(name = "arg0") String text); }

2)创建,

 
<?xml version="1.0" encoding="UTF-8"?> <beans xmlns="/schema/beans" xmlns:xsi="http:///2001/XMLSchema-instance" xmlns:p="/schema/p" xmlns:jaxws="/jaxws" xmlns:cxf="/core" xsi:schemaLocation="/schema/beans /schema/beans/spring-beans-2. /jaxws /schema/"> <bean  class="" factory-bean="clientFactory" factory-method="create" /> <bean  class=""> <property name="serviceClass" value="" /> <property name="address" value="http://localhost:8080/test/HelloWorld" /> </bean> </beans>

 

3)测试类

 

 

package ;

import ;
import ;

import ;

public class Test {
    public static void main(String[] args) {
        ApplicationContext ctx = new ClassPathXmlApplicationContext("");
        IHelloWorld client = (IHelloWorld) ("client");
        String result = ("你好!");
        (result);
    }
}

 

运行成功后显示

Hello:你好!

 

文章参考: /lib/view/