当前位置: 首页 > 知识库问答 >
问题:

“XXX是一个接口,jaxb无法处理接口”错误仅在liferay上下文中出现

董胡非
2023-03-14

我使用CXF2.7.5调用Web服务。我使用wsdl2java程序(在命令行MSDOS和maven中)生成了客户机类。我必须使用xmlbeans数据绑定,因为使用jaxb(默认数据绑定)时会出现一些错误,并且无法修改服务器端。因此,使用xmlbeans数据绑定参数,生成就可以了。

我用以下方法调用web方法:

WcfDemandService service = new WcfDemandService();
IWcfDemandService client = service.getBasicHttpBindingIWcfDemandService();
TODemand ticketToSubmit = TODemand.Factory.newInstance();

...

boolean ret = client.submit(ticketToSubmit);

当我调用webmethods时,它可以在简单的java程序上完美地工作,但在portlet liferay上下文中却无法工作:我有这个错误(在英语中,翻译为org.tempuri.CheckConsistencyDocumen是一个接口,jaxb无法处理接口):

09:48:33,899 ERROR[超文本传输协议-bio-8080-exec-4][PortletServlet: 115]javax.portlet.Portlet异常:com.sun.xml.ws.spi.db.数据库异常:com.sun.xml.bind.v2.runtime.非法注释异常:149计数非法注释异常org.tempuri.检查一致性文档est une接口et JAXB ne peut pas gérer les接口.此问题与以下位置有关:在org.tempuri.CheckConistencyDocumentorg.tempuri.CheckConistencyDocument$CheckConstityest une接口et JAXB ne peut pas gérer les接口.此问题与以下位置有关:在org.tempuri.CheckConistencyDocumal$CheckConistency在公共摘要org.tempuri.CheckConistencyDocumal$CheckConistencyorg.tempuri.CheckConistencyDocument.getCheckConistency()在org.tempuri.CheckConistencyDocumlex2004. x07.TODemand est une接口et JAXB ne peut pas gérer les接口.此问题与以下位置有关:在org.datacontract.schemas.x2004. x07... TODemand at public摘要org.datacontract.schemas.x2004. x07.*. TODemandorg.tempuri.CheckConistencyDocumal$CheckConsistency.get实体()atorg.tempuri.CheckConistencyDocumal$CheckCon一致性at public摘要org.tempuri.CheckConistencyDocumal$CheckCon一致性org.tempuri.CheckConistencyDocument.getCheckCon一致性()at org. temputer. CheckConistencyDocumenty

许多接口都会重复此错误。

你知道为什么这段代码在liferay环境下不起作用吗?

共有3个答案

松钟展
2023-03-14

如果类是使用XmlBeans生成的,那么您可以使用JaxWsProxyFactoryBean并显式配置为使用XmlBeansDataBinding,因为CXF对其所有操作都使用JAXB默认值。

JaxWsProxyFactoryBean factory = new org.apache.cxf.jaxws.JaxWsProxyFactoryBean();
factory.setServiceClass(YourServiceInterface.class);
factory.setDataBinding(new XmlBeansDataBinding()); 
factory.setAddress(endPoint);
factory.getInInterceptors().add(new org.apache.cxf.interceptor.LoggingInInterceptor());
factory.getOutInterceptors().add(new org.apache.cxf.interceptor.LoggingOutInterceptor());
叶茂
2023-03-14

这个问题是由于一个被认可的目录包含了很多图书馆;当我删除它时,错误被删除了

柯默
2023-03-14

在这种情况下,您没有使用CXF。堆栈跟踪(com.sun.xml.ws.spi….)显示您正在使用Metro,而不是CXF。检查你的类路径等,确保你真的在使用CXF。如果你想坚持下去,CXF应该能够使用XMLBeans。(尽管使用Blaise基于JAXB的解决方案可能会更好)

 类似资料:
  • 在我的应用程序中有一个对象树。要构成该树,每个对象都有一个父引用。由于某些对象类型可以是多个父对象类型的子对象,所有潜在的父对象类型都通过实现公共接口来统一。我尽可能地缩小了问题的范围(JAXB抱怨父成员变量(注释为@XmlIDREF和@xmldattribute)是一个接口): 这是我在尝试运行它时得到的例外: com.sun.xml.internal.bind.v2.runtime.非法注释异

  • 问题内容: 尝试部署应用程序时,似乎出现以下异常: 我的代码运行良好,直到将返回类型从List更改为List > 这是部分Web服务: 我也尝试过通过删除@SOAPBinding并尝试使用默认值,但是会出现相同的结果。 感谢任何帮助 更新 我要注意一些事情。我将所有List更改为ArrayList,然后进行编译。我之所以说编译但不起作用是因为它的行为很奇怪。我得到一个类型为Object的对象:Re

  • 我越来越熟悉Java使用Jax-ws(或JAXB,不确定,反正...)的网络服务。 我用一个单一的网络服务创建了一个小项目。WS有唯一的endpoint,称为传输,并返回继承ITransferResult接口的对象。 Web服务合同 Web服务实现 转让结果合同 转移结果实现 当我发布我的Web服务时,我得到以下错误: 异常线程"main"javax.xml.ws.WebServiceExctur

  • 问题内容: 我的问题是关于接口的设计选择。如果要从中创建上下文,可以执行以下操作: 如果是接口的一部分,那就更好了,这样我们可以简单地写: 对我来说似乎干净得多。它更短,并且不需要。 为什么产生子上下文的函数不是接口的一部分? 问题答案: 这是类型: 这很简单。如果要编写它的实现,可以这样做吗?是的,很容易。由于没有“设置”方法,因此每个方法都只能返回默认值/ 零值,并且是“有效”的实现。这正是背

  • 所以我有了这个spring集成项目。将网关用作触发批处理作业的触发器。我为网关制作了这个接口: 谢谢, 喷气机

  • 假设我需要依赖一个Spring bean的几个实现。我有一个接口和两个实现:和。 下面的注入将使用哪个实现?