|
精华帖 (0) :: 良好帖 (0) :: 新手帖 (0) :: 隐藏帖 (0)
|
|
|---|---|
| 作者 | 正文 |
|
时间:2007-08-03
对比了一下CXF2 和 AXIS 2 还是选择在框架中集成CXF2。不过CXF2的文档更新的真是慢啊,试了一下,目前CXF2支持的两种绑定方式jaxb2和aegis,看了半天源码总算调通了。又忍不住批一下他的文档,给的都是半调子的例子,希望开发小组能尽快完善啊!
先放一个HelloWold的aegis的配置: 一、server 端: 1. HelloWorld.java
package demo.spring;
import javax.jws.WebService;
@WebService
public interface HelloWorld {
String sayHi(String text);
}
2.HelloWorldImpl.java
package demo.spring;
import javax.jws.WebService;
@WebService(endpointInterface = "demo.spring.HelloWorld")
public class HelloWorldImpl implements HelloWorld {
public String sayHi(String text) {
return "Hello " + text;
}
}
3.beans.xml <beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:jaxws="http://cxf.apache.org/jaxws" xsi:schemaLocation=" http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd http://cxf.apache.org/jaxws http://cxf.apache.org/schemas/jaxws.xsd"> <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" /> <bean id="jaxWsServiceFactoryBean" class="org.apache.cxf.jaxws.support.JaxWsServiceFactoryBean"> <property name="wrapped" value="true" /> <property name="dataBinding" ref="aegisBean" /> </bean> <bean id="aegisBean" class="org.apache.cxf.aegis.databinding.AegisDatabinding" /> <jaxws:endpoint id="CollectiveServices" implementor="demo.spring.HelloWorldImpl" address="/HelloWorld"> <jaxws:serviceFactory> <ref bean="jaxWsServiceFactoryBean"/> </jaxws:serviceFactory> </jaxws:endpoint> </beans> 4.web.xml <web-app version="2.4" xmlns="http://java.sun.com/xml/ns/j2ee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd"> <context-param> <param-name>contextConfigLocation</param-name> <param-value>WEB-INF/beans.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>/ws/*</url-pattern> </servlet-mapping> </web-app> 二、客户端 1.ClientTest.java
package demo.spring.client;
import static org.junit.Assert.assertEquals;
import org.apache.cxf.aegis.databinding.AegisDatabinding;
import org.apache.cxf.frontend.ClientProxyFactoryBean;
import org.junit.AfterClass;
import org.junit.BeforeClass;
import org.junit.Test;
import org.springframework.context.support.ClassPathXmlApplicationContext;
import demo.spring.HelloWorld;
public final class ClientTest {
private static ClassPathXmlApplicationContext context;
@BeforeClass
public static void beforeClass() {
context = new ClassPathXmlApplicationContext(
new String[] { "demo/spring/client/client-beans.xml" });
}
@AfterClass
public static void afterClass() {
context = null;
}
@Test
public void testSayHiWithSpringConfig() throws Exception {
HelloWorld client = (HelloWorld) context.getBean("client");
String response = client.sayHi("Joe");
assertEquals("Hello Joe", response);
}
/**
* 这个官方有例子(http://cwiki.apache.org/CXF20DOC/aegis-databinding.html)
*
* @throws Exception
*/
@Test
public void testSayHiByCode() throws Exception {
ClientProxyFactoryBean factory = new ClientProxyFactoryBean();
factory.setServiceClass(HelloWorld.class);
factory.setAddress("http://localhost:8080/testCxf/ws/HelloWorld");
factory.getServiceFactory().setDataBinding(new AegisDatabinding());
HelloWorld client = (HelloWorld) factory.create();
assertEquals("Hello Joe", client.sayHi("Joe"));
}
}
2.client_beans.xml(testSayHiWithSpringConfig()中需要使用的配置文件) <beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:jaxws="http://cxf.apache.org/jaxws" xsi:schemaLocation=" http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-2.0.xsd http://cxf.apache.org/jaxws http://cxf.apache.org/schema/jaxws.xsd"> <bean id="aegisBean" class="org.apache.cxf.aegis.databinding.AegisDatabinding" /> <bean id="serviceFactoryBean" class="org.apache.cxf.jaxws.support.JaxWsServiceFactoryBean"> <property name="dataBinding" ref="aegisBean" /> </bean> <bean id="client" class="demo.spring.HelloWorld" factory-bean="clientFactory" factory-method="create" /> <bean id="clientFactory" class="org.apache.cxf.frontend.ClientProxyFactoryBean"> <property name="serviceFactory" ref="serviceFactoryBean" /> <property name="serviceClass" value="demo.spring.HelloWorld" /> <property name="address" value="http://localhost:8080/testCxf/ws/HelloWorld" /> </bean> </beans> 声明:JavaEye文章版权属于作者,受法律保护。没有作者书面许可不得转载。
|
|
| 返回顶楼 | |
|
时间:2007-08-07
好文章,顶一下.
目前CXF确实的DataBinding是 JAXB,如果你不想使用 aegis binding而只想用JAXB, 可以跳过上面有关 aegisBean 的内容即可。 BTW, 如果你觉得CXF 的用户文档写得不好, 很简单你可以注册个账户,然后直接修改上面的内容。这也是wiki的最大好处 :)。 |
|
| 返回顶楼 | |
|
时间:2007-08-09
能不能说说 CXF的异步调用
最好举个例子 讨论一下 |
|
| 返回顶楼 | |
|
时间:2007-08-15
你的也不完整啊!
|
|
| 返回顶楼 | |
|
时间:2007-08-15
CXF的生成和调用比Axis要方便哦
|
|
| 返回顶楼 | |
|
时间:2007-08-22
苦闷ing...
看了一天CXF的How - to 两个例子都没调出来 达人们给建议吧 spring 那个是 跑在tomcat里 配置是 Client-bean.xml [code] <bean id="client" class="demo.spring.HelloWorld" factory-bean="clientFactory" factory-method="create" /> <bean id="clientFactory" class="org.apache.cxf.jaxws.JaxWsProxyFactoryBean"> <property name="serviceClass" value="demo.spring.HelloWorld" /> <property name="address" value="http://localhost:8080/Restful" /> </bean> </beans> [/code] Bean.xml [code] <jaxws:endpoint id="helloWorld" implementor="demo.spring.HelloWorldImpl" address="/HelloWorld" /> [/code] 报下面的错误 org.apache.cxf.binding.soap.SoapFault: "null" is not a valid SOAP version.[code] 另外一个 Server没问题 但客户端跑不了 [code] private static final QName SERVICE_NAME = new QName("http://server.hw.demo/", "HelloWorld"); private static final QName PORT_NAME = new QName("http://server.hw.demo/", "HelloWorldPort"); private Client() { } public static void main(String args[]) throws Exception { Service service = Service.create(SERVICE_NAME); // Endpoint Address String endpointAddress = "http://localhost:9000/Restful"; // Add a port to the Service service.addPort(PORT_NAME, SOAPBinding.SOAP11HTTP_BINDING, endpointAddress); HelloWorld hw = service.getPort(HelloWorld.class); System.out.println(hw.sayHi("World")); } [/code] 报下面的错误 org.apache.cxf.interceptor.Fault: Could not send Message. |
|
| 返回顶楼 | |
|
时间:2007-08-23
Chamjoneu 写道 苦闷ing...
你能否详细的说下你的例子吗?比如说Server,Client的.看了一天CXF的How - to 两个例子都没调出来 达人们给建议吧 spring 那个是 跑在tomcat里 配置是 Client-bean.xml [code] <bean id="client" class="demo.spring.HelloWorld" factory-bean="clientFactory" factory-method="create" /> <bean id="clientFactory" class="org.apache.cxf.jaxws.JaxWsProxyFactoryBean"> <property name="serviceClass" value="demo.spring.HelloWorld" /> <property name="address" value="http://localhost:8080/Restful" /> </bean> </beans> [/code] Bean.xml [code] <jaxws:endpoint id="helloWorld" implementor="demo.spring.HelloWorldImpl" address="/HelloWorld" /> [/code] 报下面的错误 org.apache.cxf.binding.soap.SoapFault: "null" is not a valid SOAP version.[code] 另外一个 Server没问题 但客户端跑不了 [code] private static final QName SERVICE_NAME = new QName("http://server.hw.demo/", "HelloWorld"); private static final QName PORT_NAME = new QName("http://server.hw.demo/", "HelloWorldPort"); private Client() { } public static void main(String args[]) throws Exception { Service service = Service.create(SERVICE_NAME); // Endpoint Address String endpointAddress = "http://localhost:9000/Restful"; // Add a port to the Service service.addPort(PORT_NAME, SOAPBinding.SOAP11HTTP_BINDING, endpointAddress); HelloWorld hw = service.getPort(HelloWorld.class); System.out.println(hw.sayHi("World")); } [/code] 报下面的错误 org.apache.cxf.interceptor.Fault: Could not send Message. 你可以在cxf-user maillist[1] 或者cxf-user中文邮件组[2]来问你的问题. [1]http://mail-archives.apache.org/mod_mbox/incubator-cxf-user/ [2]http://groups.google.com/group/cxf-zh |
|
| 返回顶楼 | |
|
时间:2007-08-23
interpb 写道 能不能说说 CXF的异步调用
最好举个例子 讨论一下 在CXF的samples里面有个hello_world_async例子,就是讲异步的. 你可以参考下.. |
|
| 返回顶楼 | |
|
时间:2007-08-23
没用过CXF,问一下他和xFire 比起来有什么好处么?
|
|
| 返回顶楼 | |
|
时间:2007-08-24
xfire只是一个soap堆栈, 而cxf是xfire和celtix合并的产物, 所以带来了很多内容, 比如jaxws实现, restful service, 等等
此外我们有中文论坛,欢迎加入 http://groups.google.com/group/cxf-zh |
|
| 返回顶楼 | |







