请教一个问题 日语CXF问题

CXF如何实现向后兼容 - Apache CXF 专栏 - ITeye群组
当在CXF服务端pojo中添加一个新属性后,客户端如果没有重新构建,则调用服务端时会报出错误。异常如下
org.apache.cxf.interceptor.Fault: Unmarshalling Error: unexpected element (uri:"", local:"areaId").
这个问题在低版本cxf中并不存在(具体版本号忘记了),但是在2.2版本中是存在的。
想跟大家请教一下,有何好的办法可以解决这个问题。网上找到过一个解决方案,原理是写一个自定义的ValidationEventHandler,在出现错误时,判断错误信息的开头,是不是以“unexpected element”开头的,如果是,忽略。
这个方案感觉不是很牢靠,最明显的一点,在多语言环境下,错误信息是不确定的(可能是中文"意外的元素")。
还希望大家多多指点。
修改 jaxb-impl.jar 中的实现, 忽略该错误。
难道就没有不修改标准实现的做法,比如cxf是否提供配置项,可以实现打开或者关闭校验
终于找到了一个相对比较好一点的处理方法,设置cxf的一个配置项
set-jaxb-validation-event-handler为false就可以了,
&cxf:properties&&&&
&&& &entry key="set-jaxb-validation-event-handler" value="false"/& &/cxf:properties&
具体内容,大家可以看这篇文章
/index.php/code/.html
为什么找到这个cxf.xml不能编辑……而且在cxf-bean.xml里添加会报错,没有这个属性啊ITeye问答频道
[已解决]30
[size=medium]有么有人遇到过用soap协议调用CXF服务端,传递xml类型字符串报错的情况?json数据格式就可以!!! &soapenv:Body&
&mer:setRequestContent&--webservice服务端方法名
&id&111&/id&--id参数
&requestInfo&--requestInf ...
今天在学习cxf时候,通过wsdl2java生成的客户端代码,在实现调用服务端的时候,出现了问题 private static final String WEBSERVICE_URL = &http://localhost:8080/CXFServer/service/api/helloService&; public static void main(String[] arg ...
[已解决]30
我使用的是Springmvc+cxf,发布在jboss6.0启动的时候报错,错误如下: Caused by: java.lang.NoClassDefFoundError: org/springframework/context/ApplicationListener at java.lang.ClassLoader.defineClass1(Native Method) [:1.6.0_43] a ...
如题.springMVC+CXF3.0,部署到tomcat下启动,一切ok.用脚本启动一直报错NoClassDefFoundError: Could not initialize class com.sun.xml.bind.v2.model.impl.RuntimeModelBuilder.
网上查说是jdk版本的问题,但我的已经是1.6.24,应该不存在说的问题.
看了一下,报错的这个 ...
问题是这样的,我在用CXF写服务端,然后要把交互的XML报文截取保存下来。然后就使用了拦截器,详见代码。但是只要返回的报文超过了某个长度拦截器就拦截获取不到数据。 package XXX.web.webservice. import java.io.ByteArrayInputS import java.io.IOE import java.io ...
org.apache.cxf.binding.soap.SoapFault: Fault occurred while processing.
at org.apache.cxf.binding.soap.interceptor.Soap11FaultInInterceptor.unmarshalFault(Soap11FaultInInterceptor.java:75)
at org.apa ...
我通过spring+cxf2.7.5 发布了一个java实现的webservie,但是在发布生成的wsdl文件中没有看到接口的参数信息,请问是什么原因? java服务接口如下
@WebService public interface EngineServices { /** * 处方/医嘱审核接口 * @param xml * @param postType * @return */ @WebMe ...
在测试webService时候,遇到下面问题,找了半天没找到合适的解决办法
警告: Interceptor for {/}ThirdWebservice#{/}GetAccClass has thrown exception, unwinding now org.apache.cxf.interceptor.Fault ...
[已解决]15
请教一个cxf的问题,tomcat可以使用,发布到weblogic下解析有问题 @WebService public interface WSForMdmI { public Msg getVendor(Vendor vendor); } tomcat下解析正常 &xs:complexType name=&getVendor&& &xs:sequence& ...
[已解决]30
尊敬的各位大虾,我现在遇到一个问题,不知从何下手,希望得到帮助。 最近项目要使用webservice,我从网上找了示例 /content/13/20.shtml 创建了两个纯净的java工程(除了jdk6其他什么包都没引入)来验证: 1、首先是服务端的类: package com.szwx.credit.test ...
[已解决]10
WARNING: Interceptor for {/}ProjectServiceImpl has thrown exception, unwinding now org.apache.cxf.interceptor.Fault: Could not send Message.
at org.apache.cxf.interceptor.Me ...
[已解决]20
当前项目开发web service接口是基于jdk 1.6+jboss 5.1.2开发。 由于最近引进cxf 2.2.9之后,之前项目已经发布且在生产上用的web service接口无法访问,但是新开发的web service却能正常使用。 具体报错信息如下:02:05:11,561 INFO [[/BP]] Marking servlet AxaPolicyService as unavaila ...
请教大家一个问题。 java做客户端,c#做服务端。java用apache.cxf的JaxWsDynamicClientFactory根据wsdl生成client,调用服务端传递UserSyncData对象,服务端方法收到的参数对象是null,请问大家有解决办法吗?(需求:一定要用动态生成客户端的方式) 传递的对象UserSyncData 是jdk或者用cxf的wsdl2java在本地生成的poj ...
在tomcat上部署了个CXF的WebServices是成功的,可以看到wsdl 但是部署到was上出问题,按照网上的搜的,是这样做的: 将wsdl4j-1.6.3.jar放入服务器随便一个目录 在was控制台添加共享库,共享库的路径为服务器上的wsdl4j-1.6.3.jar 给server1的类装入器建立一个“类装入并且是先使用应用程序类装入器”的类装入器 重启was,测试ok 我的疑问: A. ...
客户端代码
SoapObject request = new SoapObject(&http://service./&, &createOrder&); request.addProperty(&storeId&,7); request.addProperty(&shipping ...
不知道是客户端调用问题还是,服务端配置问题
10:06:29 org.apache.cxf.phase.PhaseInterceptorChain doDefaultLogging 警告: Interceptor for {http://tempuri.org/}DataUpdateInterfaceImplService#{http://tempuri.org/}Person ...
[已解决]10
CXF部署的WebService,ASP.net的客户端调用报错,求解
8:43:53 org.apache.cxf.phase.PhaseInterceptorChain doDefaultLogging 警告: Interceptor for {http://ehr.impl./}DataUpdateInterfaceImplService#{h ...
我使用用 CXF和WSS4J搭建的一个WebService框架,发布和应用都是正常的,但是在处理客户端床送的WSS4J错误密码时就抛异常,我是故意将客户端发送的密码写错,然后客户端验证密码错误,就抛一个异常,这个异常我都不知道应该在哪捕获和如何告知客户段密码验证错误。 代码片段如下 密码验证处理的类 public class ServerPasswordCallback implements Cal ...
其实我一直没弄明白, 实现webservice本质上就是一个请求,响应一串XML或者JSON或者其他什么格式类型,只有client和server定义好格式规则(协议),那么就可以通信,完成各种服务调用. springmvc 实现webservice比较直接易懂, 而且我觉得用起来也很好用. 然后最近学习到CXF,我就一直没弄明白,为什么要用这个框架实现webservice? 它有什么优点?
最近自己在学习CXFWebService,现在服务端发布成功,客户端也能成功调用。我没用Spring发布,通过JaxWsServerFactoryBean 发布的,现在面临的问题就是,如何保证客户端的调用安全性,只允许通过验证的客户端调用我的服务,我的问题就是这个验证应该怎么做。虚心向大家学习下,我也是刚刚接触WebService,希望大家能提供下帮助,谢谢了!
& 上一页 1
本周活跃投票用户*****cxf之Filter问题***** -
- ITeye技术网站
博客分类:
说明:过滤器使用范围还是挺广泛的,比如webservice中的安全认证、数字签名、Token认证都可以使用过滤器来做;下面纯粹是一个小例子,以方便后期使用时查询,仅供参考。以服务端和客户端两部分介绍(所需要包自己导入):
【服务端】
一、定义接口
import javax.jws.WebS
@WebService
public interface HelloWorld {
public String sayHello(String inputXML);
二、定义实现类
@WebService(endpointInterface = "com.dyc.dao.HelloWorld")
public class HelloWorldImpl implements HelloWorld {
@WebMethod
public String sayHello(@WebParam(name = "inputXML") String inputXML) {
// TODO Auto-generated method stub
String name = ParseXml.parseElement(inputXML, "name");
System.out.println("Server接收到输入参数为--&" + name);
return "How are you ?--&" +
三、XML解析类(dom4j,请自导入包)
public class ParseXml {
public static String parseElement(String inputXML, String objStr) {
InputStream in =
String str =
Element rootElement =
in = new ByteArrayInputStream(inputXML.getBytes("UTF-8"));
SAXReader reader = new SAXReader();
Document document = reader.read(in); // 把流转成document对象。
rootElement = document.getRootElement();
Element tokenNode = rootElement.element(objStr);
if (tokenNode != null) {
str = tokenNode.getTextTrim();
} catch (UnsupportedEncodingException e) {
e.printStackTrace();
} catch (DocumentException e) {
e.printStackTrace();
四、过滤器
public class TokenInFilter extends AbstractPhaseInterceptor&SoapMessage& {
public TokenInFilter(String phase) {
super(Phase.PRE_INVOKE);
public void handleMessage(SoapMessage message) throws Fault {
// 获取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元素
/*解析soap的头信息*/
Element element = (Element) soapHeader.getObject();
XMLUtils.printDOM(element);
NodeList tokenList = element
.getElementsByTagName("tns:token");
/*NodeList nameList = element
.getElementsByTagName("tns:name");
NodeList passList = element
.getElementsByTagName("tns:pass");*/
String token = tokenList.item(0).getTextContent();
System.out.println("Token------&"+token);
//在此验证Token的合法性
/* System.out.println(nameList.item(0).getTextContent());
System.out.println(passList.item(0).getTextContent());*/
}catch(Exception e){
throw new Fault(new SOAPException("解析Soap信息出错!"));
五、XML配置
&?xml version="1.0" encoding="UTF-8"?&
&web-app version="2.5" xmlns="/xml/ns/javaee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="/xml/ns/javaee
/xml/ns/javaee/web-app_2_5.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&
&display-name&cxf&/display-name&
&servlet-name&cxf&/servlet-name&
&servlet-class&org.apache.cxf.transport.servlet.CXFServlet&/servlet-class&
&load-on-startup&1&/load-on-startup&
&/servlet&
&servlet-mapping&
&servlet-name&cxf&/servlet-name&
&url-pattern&/*&/url-pattern&
&/servlet-mapping&
&session-config&
&session-timeout&60&/session-timeout&
&/session-config&
&/web-app&
六、bean_1.xml:用来发布服务的配置
&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="authIntercetpr" class="com.dyc.filter.TokenInFilter"&
&constructor-arg value="receive" /&
&jaxws:endpoint id="helloWorld"
implementor="com.dyc.impl.HelloWorldImpl" address="/HelloWorld"&
&jaxws:inInterceptors& &!-- 进入webservice之前的拦截器 --&
&ref bean="authIntercetpr" /&
&/jaxws:inInterceptors&
&/jaxws:endpoint&
【客户端】
一、利用wsdl2java生成客户端代码(省略,代码太多了)
例:wsdl2java -p com.dyc.client -d d:/ws -verbose http://localhost:6888/webgisplatform/BaseService?wsdl
二、将生成的代码导入一个工程,可以建任意一个java工程
三、生成AddSoapHeader,模拟生成一个soap的头信息
public class AddSoapHeader extends AbstractSoapInterceptor {
private static String nameURI="http://localhost:8080/cxf_filter/HelloWorld";
public AddSoapHeader(){
super(Phase.WRITE);
public void handleMessage(SoapMessage message) throws Fault {
String token="";
QName qname=new QName("RequestSOAPHeader");
Document doc=DOMUtils.createDocument();
//自定义节点
Element spId=doc.createElement("tns:token");
spId.setTextContent(token);
Element username=doc.createElement("tns:name");
username.setTextContent("gary");
Element password=doc.createElement("tns:pass");
password.setTextContent("123456");
Element root=doc.createElementNS(nameURI, "tns:RequestSOAPHeader");
root.appendChild(spId);
root.appendChild(username);
root.appendChild(password);
SoapHeader head=new SoapHeader(qname,root);
List&Header& headers=message.getHeaders();
headers.add(head);
System.out.println("&&&&&添加header&&&&&&&");
四、写一个调试入口main方法
public void testSend() {
JaxWsProxyFactoryBean factory = new JaxWsProxyFactoryBean();
List&Interceptor&? extends Message&& list = new ArrayList&Interceptor&? extends Message&&();
// 添加soap header
list.add(new AddSoapHeader());
// 添加soap消息日志打印
list.add(new org.apache.cxf.interceptor.LoggingOutInterceptor());
factory.setOutInterceptors(list);
factory.setServiceClass(HelloWorld.class);
.setAddress("http://localhost:8080/cxf_filter/HelloWorld");
Object obj = factory.create();
System.out.println(obj == null ? "NULL" : obj.getClass().getName());
if (obj != null) {
HelloWorld ws = (HelloWorld)
String name = Dom4jDemo.createDocument("");
System.out.println(name);
// 1、获取连接
String str = ws.sayHello(name) ;
System.out.println("res---&" + str);
} catch (Exception ex) {
ex.printStackTrace();
public static void main(String[] args) {
Test tc = new Test();
tc.testSend();
OK!发布好服务端,启动服务,可以测试了!
dycsos123ok
浏览: 48760 次
来自: 杭州
我现在就遇到这种情况,怎么解决啊!jar包都有!!
zhuangshuo 写道博主你好,创建一个像你解析里面一样的 ...
博主你好,创建一个像你解析里面一样的xml文件 值里面有2个
zwzwzw0a0s 写道如果异常同时有多个,该怎么解决?
可 ...Apache CXF,客户端可以是非Java语言的吗?
Apache CXF,客户端可以是非Java语言的吗?
当然返回json也是可以的
只要能读xml,任何语言都可以
--- 共有 1 条评论 ---2011年4月 Java大版内专家分月排行榜第二2010年8月 Java大版内专家分月排行榜第二2010年5月 Java大版内专家分月排行榜第二2008年2月 Java大版内专家分月排行榜第二2007年7月 Java大版内专家分月排行榜第二
2011年2月 Java大版内专家分月排行榜第三2010年9月 Java大版内专家分月排行榜第三2008年9月 Java大版内专家分月排行榜第三2008年1月 Java大版内专家分月排行榜第三2007年11月 Java大版内专家分月排行榜第三2007年9月 Java大版内专家分月排行榜第三
本帖子已过去太久远了,不再提供回复功能。}

我要回帖

更多关于 不成问题的问题 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信