下面的测试类包含了发布服务和客户端调用的代码:
<
dependency
>
<
groupId
>
junit
groupId
>
<
artifactId
>
junit
artifactId
>
<
version
>
4.12
version
>
<
scope
>
test
scope
>
dependency
>
package
com.dogiant.demo;
import
javax.xml.ws.Endpoint;
import
org.apache.cxf.jaxws.JaxWsProxyFactoryBean;
import
org.junit.Assert;
import
junit.framework.TestCase;
public
class
TestEndpoint
extends
TestCase {
private
static
final
String
ADDRESS
=
"http://localhost:9000/cxfdemo"
;
protected
void
setUp()
throws
Exception {
super
.setUp();
System.
out
.println(
"Starting Server"
);
CXFDemoImpl
demo
=
new
CXFDemoImpl();
Endpoint. publish(
ADDRESS
,
demo
);
System.
out
.println(
"Start success"
);
}
public
void
testSayHello() {
JaxWsProxyFactoryBean
factory
=
new
JaxWsProxyFactoryBean();
factory
.setServiceClass(CXFDemo.
class
);
factory
.setAddress(
ADDRESS
);
CXFDemo
client
= (CXFDemo)
factory
.create();
Assert. assertEquals(
client
.sayHello(
"foo"
),
"hello foo"
);
}
}
信息: Creating Service {http://demo.dogiant.com/}CXFDemoImplService from class com.dogiant.demo.CXFDemo
2016-3-28 10:49:48 org.apache.cxf.endpoint.ServerImpl initDestination
信息: Setting the server's publish address to be http://localhost:9000/cxfdemo
2016-3-28 10:49:48 org.mortbay.log.Slf4jLog info
信息: Logging to org.slf4j.impl.JDK14LoggerAdapter(org.mortbay.log) via org.mortbay.log.Slf4jLog
2016-3-28 10:49:48 org.mortbay.log.Slf4jLog info
信息: jetty-6.1.21
2016-3-28 10:49:48 org.mortbay.log.Slf4jLog info
Start success
2016-3-28 10:49:48 org.apache.cxf.service.factory.ReflectionServiceFactoryBean buildServiceFromClass
信息: Creating Service {http://demo.dogiant.com/}CXFDemoService from class com.dogiant.demo.CXFDemo
四、在webapp中发布
web.xml
xml
version
=
"1.0"
encoding
=
"UTF-8"
?>
<
web-app
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 "
version
=
"2.5"
>
<
display-name
>
spring- cxf-demo
display-name
>
<
context-param
>
<
param-name
>
contextConfigLocation
param-name
>
<
param-value
>
classpath*:spring/spring-config*. 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
>
servlet
>
<
servlet-mapping
>
<
servlet-name
>
CXFServlet
servlet-name
>
<
url-pattern
>
/services/*
url-pattern
>
servlet-mapping
>
web-app
>
spring-config-cxf.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"
xsi:schemaLocation
=
"http://cxf.apache.org/jaxws
http://cxf.apache.org/schemas/jaxws.xsd
http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans.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"
/>
<
jaxws:endpoint
id
=
"cxfDemo"
implementor
=
"com.dogiant.demo.CXFDemoImpl"
address
=
"/cxfdemo"
/>
beans
>
http://localhost:8080/services/cxfdemo
<
dependency
>
<
groupId
>
javax.servlet
groupId
>
<
artifactId
>
servlet-api
artifactId
>
<
version
>
2.5
version
>
<scope >provided scope > //此处不注意会报错
dependency
>
http://localhost:8080/services/cxfdemo?wsdl
五、客户端
package
com.dogiant.demo;
import
org.apache.cxf.jaxws.JaxWsProxyFactoryBean;
public
class
CXFClient {
public
static
void
main(String[]
args
) {
JaxWsProxyFactoryBean
proxy
=
new
JaxWsProxyFactoryBean();
proxy
.setServiceClass(CXFDemo.
class
);
proxy
.setAddress(
"http://localhost:8080/services/cxfdemo"
);
CXFDemo
cxf
= (CXFDemo)
proxy
.create();
System.
out
.println(
cxf
.sayHello(
"haha"
));
}
与spring集成
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"
xsi:schemaLocation
=
"http://cxf.apache.org/jaxws
http://cxf.apache.org/schemas/jaxws.xsd
http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans.xsd"
>
<
bean
id
=
"clientFactory"
class
=
"
or
g.apache.cxf.jaxws.JaxWsProxyFactoryBean"
>
<
property
name
=
"serviceClass"
value
=
"com.dogiant.demo.CXFDemo"
/>
<
property
name
=
"address"
value
=
"http://localhost:8080/services/cxfdemo"
/>
bean
>
<
bean
id
=
"client"
class
=
"com.dogiant.demo.CXFDemo"
factory-bean
=
"clientFactory"
factory-method
=
"create"
/>
beans
>
测试用例
package
com.dogiant.demo;
import
org.junit.Test;
import
org.junit.runner.RunWith;
import
org.springframework.beans.factory.annotation.Autowired;
import
org.springframework.test.context.ContextConfiguration;
import
org.springframework.test.context.junit4.SpringJUnit4ClassRunner;
@RunWith
(SpringJUnit4ClassRunner.
class
)
@ContextConfiguration
(locations = {
"classpath:spring/spring-config-cxf-client.xml"
})
public
class
TestCXFClient {
@Autowired
private
CXFDemo
client
;
@Test
public
void
test() {
System.
out
.println(
client
.sayHello(
"hello"
));
}
}