环境:Jdk版本1.6.0_03(如果你使用Jdk7也许会非常顺利,因此在这里有必要把jdk版本说明下)
CXF版本2.1
说明:版本不同,引入的jar包也相应的有所不同
cxf简单例子
cxf java项目的目录结构以及jar包,如图
步骤:
1.接口HelloWorld.java
package com.demo; import java.util.List; import javax.jws.WebParam; import javax.jws.WebService; @WebService public interface HelloWorld { String sayHi(@WebParam(name="text")String text); String sayHiToUser(User user); String[] SayHiToUserList(List<User> userList); }
2.实现HelloWorld接口,编写HelloWorldImpl.java
package com.demo; import java.util.LinkedHashMap; import java.util.List; import java.util.Map; import javax.jws.WebService; @WebService(endpointInterface="com.demo.HelloWorld",serviceName="HelloWorld") public class HelloWorldImpl implements HelloWorld { Map<Integer, User> users = new LinkedHashMap<Integer, User>(); public String sayHi(String text) { return "Hello " + text; } public String sayHiToUser(User user) { users.put(users.size()+1, user); return "Hello "+ user.getName(); } public String[] SayHiToUserList(List<User> userList) { String[] result = new String[userList.size()]; int i=0; for(User u:userList){ result[i] = "Hello " + u.getName(); i++; } return result; } }
3.编写bean
package com.demo; public class User { private String name; private String description; public String getName() { return name; } public void setName(String name) { this.name = name; } public String getDescription() { return description; } public void setDescription(String description) { this.description = description; } }
4.编写服务端用于启动服务
package com.demo; import javax.xml.ws.Endpoint; public class webServiceApp { public static void main(String[] args) { System.out.println(System.getProperty("java.endorsed.dirs")); System.out.println("web service start"); HelloWorldImpl implementor= new HelloWorldImpl(); String address="http://localhost:9000/helloWorld"; Endpoint.publish(address, implementor); System.out.println("web service started"); } }
5.编写客户端用于测试
package com.demo; import org.apache.cxf.jaxws.JaxWsProxyFactoryBean; public class HelloWorldClient { public static void main(String[] args) { JaxWsProxyFactoryBean svr = new JaxWsProxyFactoryBean(); svr.setServiceClass(HelloWorld.class); svr.setAddress("http://localhost:9000/helloWorld"); HelloWorld hw = (HelloWorld) svr.create();//创建一个代理类 User user = new User(); user.setName("Tony"); user.setDescription("test"); System.out.println(hw.sayHiToUser(user)); } }
problem:在第4步启动服务是会报如下错误
Exception in thread "main" java.lang.LinkageError: JAXB 2.0 API is being loaded from the bootstrap classloader,
but this RI (from jar:file:/D:/eclipse4.4/workspace/CXFDemo/lib/jaxb-impl-2.1.6.jar!/com/sun/xml/bind/v2/model/impl/ModelBuilder.class)
needs 2.1 API. Use the endorsed directory mechanism to place jaxb-api.jar in the bootstrap classloader.(See http://java.sun.com/j2se/1.5.0/docs/guide/standards/)
翻译:Exception in thread "main" java.lang.LinkageError: 正在从引导类加载器加载 JAXB 2.1 API, 但此 RI (来自jar:file:/E:/jinwork/cxf/WebContent/WEB-INF/lib/jaxb-impl-2.2.6.jar! /com/sun/xml/bind/v2/model/impl/ModelBuilder.class) 需要 2.2 API。请使用授权目录机制将 jaxb-api.jar 放在引导类加载器中。(请参阅 http://java.sun.com/j2se/1.6.0/docs/guide/standards/)
解决办法:
1.首先获取到endorsed目录。
public class MainClass {
public static void main(String[] args) {
// TODO Auto-generated method stub
System.out.println(System.getProperty("java.endorsed.dirs"));
}
}
输出:D:\software\jdk1.6\jre\lib\endorsed
2.找到相应位置,将apache-cxf-2.1\lib下的jaxb-api-2.1.jar文件放到D:\software\jdk1.6\jre\lib\endorsed目录下即可。如果没有endorsed目录,则手动建立该目录。
相关推荐
**WebService (一) CXF 入门 HelloWorld** 在IT行业中,WebService是一种基于开放标准(如XML、WSDL和SOAP)的互联网通信协议,允许不同系统之间的应用程序进行互操作。本篇将详细介绍如何使用Apache CXF框架来创建...
implementor="#helloWorld" address="/HelloWorld"/> ``` #### 2.4 部署和测试 - 在Spring配置完成后,可以通过CXF的Servlet部署到Tomcat或其他Servlet容器中。 - 在Web应用的`web.xml`中配置CXF的Servlet监听...
<jaxws:endpoint id="helloWorldEndpoint" implementor="#helloWorld" address="/HelloWorld"/> ``` 3.4 调用服务 客户端可以通过CXF的JAXB或者SOAP客户端API来调用服务,或者直接使用HTTP请求调用RESTful服务。 ...
<jaxws:endpoint id="helloWorld" implementor="com.example.HelloWorldServiceImpl" address="/HelloWorld"/> ``` #### 3.4 部署到Web服务器 - 将上述配置和实现打包成WAR文件,然后部署到Web服务器,如Tomcat...
HelloWorld proxy = (HelloWorld) factory.create(); System.out.println(proxy.sayHello("World")); } } ``` 当你运行`HelloWorldClient`时,它会调用服务器上的`sayHello`方法,并打印出结果。 总结来说,...
这个例子中,`/hello/world`路径会返回"Hello, World!"。 ### 5. CXF的扩展性 除了基本的Web服务功能,CXF还提供了丰富的扩展,例如: - **数据绑定**:CXF支持JAXB(Java Architecture for XML Binding)进行对象...
public class HelloWorldImpl implements HelloWorld { @Override public String sayHello(String name) { return "Hello " + name; } } ``` - **启动服务**:启动 Tomcat 或其他支持的 Servlet 容器,访问 `...
通过以上步骤,可以构建一个简单的HelloWorld示例,从而进一步了解CXF框架的基本用法和功能。 通过上述介绍,我们可以看到,**CXF** 不仅是一个强大的WebService框架,而且具有高度的灵活性和扩展性,能够满足各种...
#### 四、Apache CXF HelloWorld 实例 - **步骤**: 1. **下载安装**:从 Apache 官方网站下载 Apache CXF,版本为 2.2.2。 2. **创建 Java 项目**:使用 Eclipse 或 IntelliJ IDEA 创建一个新的 Java 项目。 3....
return "Hello, World!"; } } ``` ### 实现工具和技术栈 对于上述几种Java WebService技术,常见的实现工具和技术栈包括Apache CXF、Spring Boot等。例如,Apache CXF提供了强大的框架来支持JAX-WS、JAX-RS等...