控制台输出cxf webservicesoapclient接收到的soap(xml格式)请求数据,给个demo?

博客分类:
昨天我们一起学习了一下xfire,今天我们来看一下CXF,为什么学完那个接着学这个呢。因为CXF是在xfire的基础上实现
的,所以我们学习它会比较简单点,毕竟我们昨天刚看过了xfire的实现方法。废话少说,直接来例子。
1)首先呢,还是包的问题,在这里可以下到最新版的CXF,当然,我用的是最新版的。接下来还是那句废话,建WEB项目,放入JAR包。而JAR包我们就不选择了,一堆全部放入。
我们会看到它包含了spring的JAR包,后面当我们需要把CXF作为WEB项目部署时,就需要用到spring的配置文件,这个后面再讲。
还是接口类和实现类:
@WebService
public interface IReaderService {
public Reader getReader(@WebParam(name="name") String name,@WebParam(name="password") String password);
public List&Reader& getReaders();
@WebService(endpointInterface="com.cxf.servlet.IReaderService",serviceName="readerService")
public class ReaderService implements IReaderService{
public Reader getReader(@WebParam(name="name") String name,@WebParam(name="password") String password) {
return new Reader(name,password);
public List&Reader& getReaders(){
List&Reader& readerList = new ArrayList&Reader&();
readerList.add(new Reader("shun1","123"));
readerList.add(new Reader("shun2","123"));
return readerL
这两个类除了加入注解外,其他均和昨天讲的webservice的一样。这里就不多讲了,对注解的解释,大家可以看看JAVAEE的文档。不过按意思应该很容易理解的。
接下来就是JAVABEAN,还是那个Reader类:
public class Reader{
private static final long serialVersionUID = 1L;
public Reader(){}
public Reader(String name,String password) {
this.name =
this.password =
//Get/Set方法省略
public String toString(){
return "Name:"+name+",Password:"+
上面的已经写完了。
2)我们要用做WEB项目吗?不急,先不用,CXF自带了一个轻量的容器服务,相当于spring自己提供了IOC容器一样。我们可以先用它来测试一下我们部署成功没。
直接来一个测试类:
public static void main(String[] args) {
System.out.println("Server is starting...");
ReaderService readerService = new ReaderService();
Endpoint.publish("http://localhost:8080/readerService",readerService);
System.out.println("Server is started...");
简单得不得了吧。直接publish地址,然后指定接口或类就OK了。我这里用的是类,但尽量用接口,毕竟面向接口编程才是真正的面对对象思想。
我们启动看看结果:
我们看到启动已经完成,接着启动浏览器看看是否成功了。
直接在浏览器输入,我们可以看到:
它生成了我们所需要的wsdl文件,说明我们部署成功了。
3)部署成功后,我们就是要调用啦,它的调用也相当简单,跟xfire类似,取得接口,然后就可以跟本地类一样调用方法了。
public static void main(String[] args) {
JaxWsProxyFactoryBean factoryBean = new JaxWsProxyFactoryBean();
factoryBean.setServiceClass(IReaderService.class);
factoryBean.setAddress("http://localhost:8080/readerService");
IReaderService readerService = (IReaderService)factoryBean.create();
Reader reader = readerService.getReader("shun","123");
System.out.println("Reader:"+reader);
这里很简单,也是取得一个工厂类,然后直接设接口和地址再create就可以得取相应的接口了,这里跟xfire一样,也是需要调用端先定义好接口原型,否则这些调用将无从说起。
我们运行得到结果:
没问题,跟我们预想的结果一致。
4)但很多情况下,我们并不希望我们的webservice和我们的应用分开两个服务器,而希望他们在同一个容器,tomcat或JBOSS或其他的,这样我们就必须通过WEB来部署我们前面完成的webservice。
注意,我们这里需要用到spring定义文件。
首先看看web.xml:
&?xml version="1.0" encoding="UTF-8"?&
&web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns="http://java.sun.com/xml/ns/javaee" xmlns:web="http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"
xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd"
id="WebApp_ID" version="3.0"&
&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-name&CXFServlet&/servlet-name&
&servlet-class&org.apache.cxf.transport.servlet.CXFServlet&/servlet-class&
&/servlet&
&servlet-mapping&
&servlet-name&CXFServlet&/servlet-name&
&url-pattern&/webservice/*&/url-pattern&
&/servlet-mapping&
&/web-app&
这里很简单,只是指定了spring的监听器和相应的配置文件路径,并且指定了CXF的拦截方式。
接下来看看beans.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://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" /&
&jaxws:endpoint id="readerServicce2"
implementor="com.cxf.servlet.ReaderService" address="/readerService2" /&
这里很简单,只是通过jaxws:endpoint定义了一个webservice,implementor是webservice的处理类,而address是它的访问路径,跟我们前面写的readerService类似。
这时我们可以把它部署到tomcat中,通过可以直接访问。
有些朋友会问,为什么这次访问的URL跟前面的不一样呢。其实前面的访问地址是我们自己定义的,而这里的webservice地址是我们在配置文件中配置好的,并且是通过web项目来部署的,这里就需要用项目名称,而且我们在CXFServlet那里配置了url-pattern是webservice,所以最后的URL就跟上面一致了。
我们可以看到效果:
这证明我们部署成功了。
可以再次用前面的测试类测试一下,注意,需要把address修改成我们发布后的URL。
CXF相比xfire又更简洁了一些,虽然它增加了一些注解,但这些无伤大雅,它只是把以前的services.xml中的信息集中到类中,反而更方便维护,但这还是见仁见智的,有些人就喜欢配置文件,而有些人就不喜欢。另外CXF的调用方式更加简洁,比起xfire它的代码量更小了,是一个较大的进步。
有些朋友在搭建的过程中出现了一些问题,免去一个个回复了,这里放出代码,有需要的朋友可以下载看看。
lib目录下的所有包均没有放入,把cxf的所有包放入即可。
注:所用IDE为idea,文件结构跟eclipse不通用,如果需要在eclipse下使用的,可以直接复制代码和文件到eclipse新建的项目即可。
下载次数: 2301
浏览 130510
为什么我的new Reader说的是Cannot instantiate the type Reader??看看是不是引用了错误的Reader类。
为什么调用方法成功了但是参数都是null Reader类中已经添加了set/get方法看一下参数名大小写有没有一些,检查一下是否漏了@WebParam这个注解。
如何在java Web项目中开发WebService接口文章里面有个不错的回答,但可惜我这里用的是CXF,你贴的文章对想学习CXF的朋友来说,用处不算太大。但如果是没有限定技术类型,这倒是一个很简单的做法。
Server is started 可是为何还是出错? 18:38:53 org.apache.cxf.interceptor.AttachmentInInterceptor handleMessage信息: AttachmentInInterceptor skipped in HTTP GET method 18:38:53 org.apache.cxf.interceptor.StaxInInterceptor handleMessage信息: StaxInInterceptor skipped.这个已经好了,现在有出现这个问题,LZ,帮忙看下严重: Allocate exception for servlet CXFServletorg.springframework.beans.factory.NoSuchBeanDefinitionException: No bean named 'cxf' is defined at org.springframework.beans.factory.support.DefaultListableBeanFactory.getBeanDefinition(DefaultListableBeanFactory.java:529) at org.springframework.beans.factory.support.AbstractBeanFactory.getMergedLocalBeanDefinition(AbstractBeanFactory.java:1094) at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:276) at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:196) at org.springframework.context.support.AbstractApplicationContext.getBean(AbstractApplicationContext.java:1079) at org.apache.cxf.transport.servlet.CXFServlet.loadBus(CXFServlet.java:77) at org.apache.cxf.transport.servlet.CXFNonSpringServlet.init(CXFNonSpringServlet.java:71) at org.apache.catalina.core.StandardWrapper.loadServlet(StandardWrapper.java:1206) at org.apache.catalina.core.StandardWrapper.allocate(StandardWrapper.java:827) at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:129) at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:191) at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:127) at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:103) at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109) at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:293) at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:861) at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:606) at org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:489) at java.lang.Thread.run(Unknown Source)
Server is starting...三月 06, :28 下午 org.apache.cxf.jaxws.EndpointUtils isValidImplementor信息: Implementor is not annotated with WebService annotation.Exception in thread "main" javax.xml.ws.WebServiceException: Cannot create Endpoint for implementor that does not have a WebService annotation and does not implement the Provider interface at org.apache.cxf.jaxws.spi.ProviderImpl.createEndpoint(ProviderImpl.java:135) at org.apache.cxf.jaxws.spi.ProviderImpl.createAndPublishEndpoint(ProviderImpl.java:154) at javax.xml.ws.Endpoint.publish(Endpoint.java:240) at com.rock.cxf.TestMain.main(TestMain.java:30)为什么我运行是这样,有没整个例子呢?这个看样子是你没有使用@WebService这个annotation,我回去弄一下下载出来。
写的很好。。不过这鬼东西貌似有缓存的问题。把工程clean就可以了。。。
为什么我的,打印对象的时候,怎么全是空啊?hubowei1 写道Reader reader = readerService.getReader("shun","123");&& System.out.println("Reader:"+reader);&& 我怎么打印出来的结果是:Reader:Name:null,Password:null在Reader bean中缺少了name和password的get、set方法,加上去就好了。
public Reader getReader(@WebParam(name="name") String name,@WebParam(name="password")改成 public Reader getReader(@WebParam(name="names") String name,@WebParam(name="passwords")最后测试地址 应该是这个 factoryBean.setAddress("http://localhost:8080/CfxTest/webservice/readerService2");
Reader reader = readerService.getReader("shun","123");&& System.out.println("Reader:"+reader);&& 我怎么打印出来的结果是:Reader:Name:null,Password:null你检查一下你的webservice相关的annotation有没有注解正确,最重要的是@WebParam和@Webservice。
& 上一页 1
浏览: 627081 次
来自: 广州
这才是真正对新手有用的文章。
由CXF实现的微服务需要有比较好的工具去测试RESTful A ...
如今,java技术框架太多了,给你分享一个好玩代码生成器,ht ...
(window.slotbydup=window.slotbydup || []).push({
id: '4773203',
container: s,
size: '200,200',
display: 'inlay-fix'博客分类:
服务器端代码:
ITestSendData.java
import javax.jws.WebS
import javax.jws.soap.SOAPB
import javax.jws.soap.SOAPBinding.S
import pojo.TestJmsC
@WebService
@SOAPBinding(style=Style.RPC)
public interface ITestSendData {
public String getString(String str);
public void testAddData(TestJmsCxf tjc);
import javax.annotation.R
import dao.TestJmsCxfD
import pojo.TestJmsC
public class TestSendDataImpl implements ITestSendData {
private TestJmsCxfDao testjcDao=new TestJmsCxfDao();
public String getString(String str) {
System.out.println("接收到的数据为: "+str);
return "接收到的数据为: "+
public void testAddData(TestJmsCxf tjc) {
testjcDao.insert(tjc);
public TestJmsCxfDao getTestjcDao() {
return testjcD
//下面的注释一定要加上,否则spring无法注入,将数据保存到数据库的时候会造成空指针,此处我也不明白为什么要这么做,我觉得spring配置文件中已经注入了,而且set不也是一种注入的方式吗,但是不加这个的话就会报错,最后就试了这种注入的方法,成功了
@Resource(name="TestJmsCxfDao")
public void setTestjcDao(TestJmsCxfDao testjcDao) {
this.testjcDao = testjcD
applicationContext-server.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://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="sendDataServiceBean" class="testcxf.TestSendDataImpl" /&
&bean id="inMessageInterceptor" class="org.apache.cxf.interceptor.LoggingInInterceptor"&
&bean id="outLoggingInterceptor" class="org.apache.cxf.interceptor.LoggingOutInterceptor" /&
&!-- 注意下面的address,这里的address的名称就是访问的WebService的name --&
&jaxws:server id="sendDataService" serviceClass="testcxf.ITestSendData" address="/SendData"&
&jaxws:serviceBean&
&ref bean="sendDataServiceBean" /&
&/jaxws:serviceBean&
&jaxws:inInterceptors&
&ref bean="inMessageInterceptor" /&
&/jaxws:inInterceptors&
&jaxws:outInterceptors&
&ref bean="outLoggingInterceptor" /&
&/jaxws:outInterceptors&
&/jaxws:server&
&listener&
&listener-class&org.springframework.web.context.ContextLoaderListener&/listener-class&
&/listener&
&!-- 设置Spring容器加载配置文件路径 --&
&context-param&
&param-name&contextConfigLocation&/param-name&
&param-value&classpath*:applicationContext*.xml,/WEB-INF/classes/spring/spring-*.xml&/param-value&
&/context-param&
&listener&
&listener-class&org.springframework.web.util.IntrospectorCleanupListener&/listener-class&
&/listener&
&servlet-name&CXFService&/servlet-name&
&servlet-class&org.apache.cxf.transport.servlet.CXFServlet&/servlet-class&
&/servlet&
&servlet-mapping&
&servlet-name&CXFService&/servlet-name&
&url-pattern&/ws/*&/url-pattern&
&/servlet-mapping&
spring-service.xml
&bean id="TestSendDateService" class="testcxf.TestSendDataImpl"&
&property name="testjcDao"&
&ref bean="TestJmsCxfDao"/&
&/property&
import org.apache.cxf.jaxws.JaxWsProxyFactoryB
import pojo.TestJmsC
public class TestSendDataClient {
* @param args
public static void main(String[] args) {
JaxWsProxyFactoryBean factory = new JaxWsProxyFactoryBean();
factory.setServiceClass(ITestSendData.class);
factory.setAddress("http://localhost:8080/testMyAgricutural/ws/SendData?wsdl");
ITestSendData send = (ITestSendData)factory.create();
String str = send.getString("ni hao !");
TestJmsCxf tjc = new TestJmsCxf();
tjc.setName("ni hao !");
send.testAddData(tjc);
tuoxinquyu
浏览: 9763 次
来自: 郑州
(window.slotbydup=window.slotbydup || []).push({
id: '4773203',
container: s,
size: '200,200',
display: 'inlay-fix'用CXF实现webservice,怎么接受xml格式的数据_百度知道
用CXF实现webservice,怎么接受xml格式的数据
我有更好的答案
dom4j解析xml,然后把解析的数据封装到bean里。jsp页面上获取bean然后显示就行了。 和平常的从数据库取数据,封装后在页面上显示没有区别。不过就是不去数据库取数据,而是靠xml来取数据。
为您推荐:
其他类似问题
换一换
回答问题,赢新手礼包
个人、企业类
违法有害信息,请在下方选择后提交
色情、暴力
我们会通过消息、邮箱等方式尽快将举报结果通知您。博客分类:
下面具体的webservice实现类直接用的是上面的,这里不再说明
CXF拦截器使用,创建一个使用SOAPHeader的安全验证
&soap:Header&
&auth:authentication xmlns:auth="http://gd.chinamobile.com//authentication"&
&auth:systemID&1&/auth:systemID&
&auth:userID&test&/auth:userID&
&auth:password&test&/auth:password&
&/auth:authentication&
&/soap:Header&
一,首先在服务端创建一个拦截器(被调用端),需要继承org.apache.cxf.phase.AbstractPhaseInterceptor
代码如下:
import java.util.L
import javax.xml.soap.SOAPE
import org.apache.cxf.binding.soap.SoapH
import org.apache.cxf.binding.soap.SoapM
import org.apache.cxf.headers.H
import org.apache.cxf.helpers.XMLU
import org.apache.cxf.interceptor.F
import org.apache.cxf.phase.AbstractPhaseI
import org.apache.cxf.phase.P
import org.apache.log4j.L
import org.w3c.dom.E
import org.w3c.dom.NodeL
public class AuthIntercetpr extends AbstractPhaseInterceptor&SoapMessage& {
private static final Logger logger = Logger.getLogger(AuthIntercetpr.class);
public static final String xml_namespaceUR_att = "http://gd.chinamobile.com//authentication";
public static final String xml_header_el = "soap:Header";
public static final String xml_authentication_el = "auth:authentication";
public static final String xml_systemID_el = "auth:systemID";
public static final String xml_userID_el = "auth:userID";
public static final String xml_password_el = "auth:password";
public AuthIntercetpr() {
// 指定该拦截器在哪个阶段被激发
super(Phase.PRE_INVOKE);
// 处理消息
public void handleMessage(SoapMessage message) {
logger.info("==================SoapMessage =" + message);
// 获取SOAP消息的全部头
List&Header& headers = message.getHeaders();
if (null == headers || headers.size() & 1) {
throw new Fault(new SOAPException("SOAP消息头格式不对哦!"));
for (Header header : headers) {
SoapHeader soapHeader = (SoapHeader)
// 取出SOAP的Header元素
Element element = (Element) soapHeader.getObject();
logger.info("ELEMENT =" + element.toString());
XMLUtils.printDOM(element);
NodeList userIdNodes = element
.getElementsByTagName(xml_userID_el);
NodeList pwdNodes = element
.getElementsByTagName(xml_password_el);
NodeList systemIdNodes = element
.getElementsByTagName(xml_systemID_el);
logger.info("############ 打印帐号信息 ##############");
logger.info(userIdNodes.item(0) + "="
+ userIdNodes.item(0).getTextContent());
logger.info(systemIdNodes.item(0) + "="
+ systemIdNodes.item(0).getTextContent());
logger.info(pwdNodes.item(0) + "="
+ pwdNodes.item(0).getTextContent());
logger.info("############————————##############");
if (null != userIdNodes
&& userIdNodes.item(0).getTextContent().equels("test") ) {
if (null != pwdNodes
&& pwdNodes.item(0).getTextContent().equals("test")) {
logger.info("$$$$$$$$ 认证成功");
} else {//认证失败则抛出异常,停止继续操作
SOAPException soapExc = new SOAPException("阁下可能不是合法用户!");
throw new Fault(soapExc);
} else {//认证失败则抛出异常,停止继续操作
SOAPException soapExc = new SOAPException("阁下可能不是合法用户!");
throw new Fault(soapExc);
二,修改cxf-beans.xml
&!--id:随意配,implementor:指定接口具体实现类,address:随意配,访问时会用到,下面会做说明--&
&!--拦截器--&
&bean id="authIntercetpr" class="unitTest.AuthIntercetpr"&&/bean&
&jaxws:endpoint id="HelloWorldService" implementor="com.ws.HelloWorldServiceImpl"
address="/IHelloService"&
&!-- 在此配置调用当前ws所触发的拦截器--&
&jaxws:inInterceptors&&ref bean="authIntercetpr" /&&/bean&
&!--或者直接在这里写&bean
class="unitTest.AuthIntercetpr"&&/bean&--&
&/jaxws:inInterceptors&
&/jaxws:endpoint&
到此服务端工作完毕!!!
下面是客户端(调用端)
三,这边同样创建一个拦截器,实现org.apache.cxf.binding.soap.interceptor.AbstractSoapInterceptor
import java.text.SimpleDateF
import java.util.D
import java.util.L
import javax.xml.namespace.QN
import org.apache.cxf.binding.soap.SoapH
import org.apache.cxf.binding.soap.SoapM
import org.apache.cxf.binding.soap.interceptor.AbstractSoapI
import org.apache.cxf.headers.H
import org.apache.cxf.helpers.DOMU
import org.apache.cxf.helpers.XMLU
import org.apache.cxf.interceptor.F
import org.apache.cxf.phase.P
import org.w3c.dom.D
import org.w3c.dom.E
public class AddSoapHeader extends AbstractSoapInterceptor {
public static final String xml_namespaceUR_att = "http://gd.chinamobile.com//authentication";
public static final String xml_header_el = "soap:Header";
public static final String xml_authentication_el = "auth:authentication";
public static final String xml_systemID_el = "auth:systemID";
public static final String xml_userID_el = "auth:userID";
public static final String xml_password_el = "auth:password";
public AddSoapHeader() {
// 指定该拦截器在哪个阶段被激发
super(Phase.WRITE);
public void handleMessage(SoapMessage message) throws Fault {
SimpleDateFormat sd = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
Date date = new Date();
String time = sd.format(date);
String userId = "test";
String sysId = "1";
String password = "test";
QName qname = new QName("RequestSOAPHeader");//这个值暂时不清楚具体做什么用,可以随便写
Document doc = (Document) DOMUtils.createDocument();
Element root = doc.createElement(xml_header_el);
Element eSysId = doc.createElement(xml_systemID_el);
eSysId.setTextContent(sysId);
Element eUserId = doc.createElement(xml_userID_el);
eUserId.setTextContent(userId);
Element ePwd = doc.createElement(xml_password_el);
ePwd.setTextContent(password);
Element child = doc.createElementNS(xml_namespaceUR_att,
xml_authentication_el);
child.appendChild(eSysId);
child.appendChild(eUserId);
child.appendChild(ePwd);
root.appendChild(child);
XMLUtils.printDOM(root);// 只是打印xml内容到控制台,可删除
SoapHeader head = new SoapHeader(qname, root);
List&Header& headers = message.getHeaders();
headers.add(head);
四,具体调用ws的类代码
private static final String webServiceConTimeout = "6000";
private static final String webServiceRevTimeout = "6000";
。。。。。。。
HelloWorldServiceImplService hello = new HelloWorldServiceImplService();
HelloWorldService service = hello.getHelloWorldServiceImplPort();
//以上什么意思请参考:http://learning.iteye.com/admin/blogs/1333223
Client clientProxy = ClientProxy.getClient(service);//通过目标ws获取代理
//注入拦截器,getOutInterceptors代表调用服务端时触发,getInInterceptors就是被调用才触发
clientProxy.getOutInterceptors().add(ash);
// 超时时间设置
HTTPConduit http = (HTTPConduit) clientProxy.getConduit();
HTTPClientPolicy httpClientPolicy = new HTTPClientPolicy();
httpClientPolicy.setConnectionTimeout(Integer
.valueOf(webServiceConTimeout));
httpClientPolicy.setReceiveTimeout(Integer
.valueOf(webServiceRevTimeout));
httpClientPolicy.setAllowChunking(false);
http.setClient(httpClientPolicy);
//以上插入点超时设置方式
//下面这行代码是具体调用服务段的deleteTeskTask()
CallResult cResult = service.deleteTeskTask("1223");
客户端代码到此结束
五,还有一种方式是通过JaxWsProxyFactoryBean方式,注册拦截器及实例化ws,代码如下:
private static final JaxWsProxyFactoryBean factory = new JaxWsProxyFactoryBean();
AddSoapHeader ash = new AddSoapHeader();
ArrayList list = new ArrayList();
// 添加soap header 信息
list.add(ash);
//注入拦截器,getOutInterceptors代表调用服务端时触发,getInInterceptors就是被调用才触发
factory.setOutInterceptors(list);
factory.setServiceClass(HelloWorldService.class);//实例化ws
factory.setAddress("http://xxx.xxx.xxx.xxx:8004/services/IHelloService");
Object obj = factory.create();
HelloWorldService service = (HelloWorldService)
//下面这行代码是具体调用服务段的deleteTeskTask()
CallResult cResult = service.deleteTeskTask("1223");
##########这段代码可替代步骤(四)#####
到此全部工作结束
具体一些概念还请自己baidu/google
浏览 13258
你好,楼主你的例子,实验成了吗?
测试ok的
Sev7en_jun 写道wenqxin 写道为什么不通过wss4j 提供的回调类进行实现呢,cxf 已经实现了啊。配置会比这个简单其实对于复杂程度都差不多一样,这个部分代码也可以直接通过配置来实现,这里是通过自定义的xml信息来校验,回调函数应该是定死了的PS:不知道那种可以把安全级别设置更高一点??wss4j 提供了不同安全级别的认证方式,常用的就是usernameToken(用户名和密码),你还可以通过授权文件等方式。
wenqxin 写道为什么不通过wss4j 提供的回调类进行实现呢,cxf 已经实现了啊。配置会比这个简单其实对于复杂程度都差不多一样,这个部分代码也可以直接通过配置来实现,这里是通过自定义的xml信息来校验,回调函数应该是定死了的PS:不知道那种可以把安全级别设置更高一点??
为什么不通过wss4j 提供的回调类进行实现呢,cxf 已经实现了啊。配置会比这个简单其实对于复杂程度都差不多一样,这个部分代码也可以直接通过配置来实现,这里是通过自定义的xml信息来校验,回调函数应该是定死了的
正想学习cxf呢,借楼主好文过奖了,我也是参考网上资料做的,还很多不清楚 呵呵
Sev7en_jun
浏览: 868894 次
来自: 广州
浏览量:80801
总结的挺好的 !!!
然后 通过 SOAPMessage.getHeader(qna ...
我也是接触这东西不久,QName qname = new QN ...
不知道你有没有出现 从headers 里取出来长 ...
兄弟呀,报错啦
13:27:15 n ...
(window.slotbydup=window.slotbydup || []).push({
id: '4773203',
container: s,
size: '200,200',
display: 'inlay-fix'

我要回帖

更多关于 webservice soap调用 的文章

 

随机推荐