尝试部署应用程序时,似乎出现以下异常:
Caused by: com.sun.xml.bind.v2.runtime.IllegalAnnotationsException: 2 counts of IllegalAnnotationExceptions
java.util.List is an interface, and JAXB can't handle interfaces.
this problem is related to the following location:
at java.util.List
at private java.util.List foobar.alkohol.register.webservice.jaxws.GetRelationsFromPersonResponse._return
at foobar.alkohol.register.webservice.jaxws.GetRelationsFromPersonResponse
java.util.List does not have a no-arg default constructor.
this problem is related to the following location:
at java.util.List
at private java.util.List foobar.alkohol.register.webservice.jaxws.GetRelationsFromPersonResponse._return
at foobar.alkohol.register.webservice.jaxws.GetRelationsFromPersonResponse
我的代码运行良好,直到将返回类型从List更改为List
>
这是部分Web服务:
@Name("relationService")
@Stateless
@WebService(name = "RelationService", serviceName = "RelationService")
@SOAPBinding(style = SOAPBinding.Style.DOCUMENT, use = SOAPBinding.Use.LITERAL, parameterStyle = SOAPBinding.ParameterStyle.WRAPPED)
public class RelationService implements RelationServiceLocal {
private boolean login(String username, String password) {
Identity.instance().setUsername(username);
Identity.instance().setPassword(password);
Identity.instance().login();
return Identity.instance().isLoggedIn();
}
private boolean logout() {
Identity.instance().logout();
return !Identity.instance().isLoggedIn();
}
@WebMethod
public List<List<RelationCanonical>> getRelationsFromPerson(@WebParam(name = "username")
String username, @WebParam(name = "password")
String password, @WebParam(name = "foedselsnummer")
String... foedselsnummer) {
......
......
......
}
我也尝试过通过删除@SOAPBinding并尝试使用默认值,但是会出现相同的结果。 感谢任何帮助
更新
我要注意一些事情。我将所有List更改为ArrayList,然后进行编译。我之所以说编译但不起作用是因为它的行为很奇怪。我得到一个类型为Object的对象:RelationServiceStub.ArrayList,但是该对象没有get方法,或者也没有表现为List。我也尝试将其投射到列表中,但没有用。
请注意,这是在我使用Axis 2和wsdl2java之后的。是的,现在可以编译了,但是我不知道如何获取数据。
以我的理解,您将无法List
通过JAXB 处理纯文本,因为JAXB不知道如何将其转换为XML。
相反,您将需要定义一个JAXB类型,该类型包含一个List<RelationCanonical>
(我将其称为Type1
),另一个将包含这些类型的列表(依次类推)(因为您正在处理List<List<...>>
;我将其称为此类型Type2
)
。
结果可能是这样的XML输出:
<Type2 ...>
<Type1 ...>
<RelationCanonical ...> ... </RelationCanonical>
<RelationCanonical ...> ... </RelationCanonical>
...
</Type1>
<Type1>
<RelationCanonical ...> ... </RelationCanonical>
<RelationCanonical ...> ... </RelationCanonical>
...
</Type1>
...
</Type2>
没有两个封闭的JAXB注释类型,JAXB处理器不知道要生成什么标记,因此会失败。
- 编辑:
我的意思应该是这样的:
@XmlType
public class Type1{
private List<RelationCanonical> relations;
@XmlElement
public List<RelationCanonical> getRelations(){
return this.relations;
}
public void setRelations(List<RelationCanonical> relations){
this.relations = relations;
}
}
和
@XmlRootElement
public class Type2{
private List<Type1> type1s;
@XmlElement
public List<Type1> getType1s(){
return this.type1s;
}
public void setType1s(List<Type1> type1s){
this.type1s= type1s;
}
}
您还应该查看J5EE教程和非官方JAXB指南中的JAXB部分。
在我的应用程序中有一个对象树。要构成该树,每个对象都有一个父引用。由于某些对象类型可以是多个父对象类型的子对象,所有潜在的父对象类型都通过实现公共接口来统一。我尽可能地缩小了问题的范围(JAXB抱怨父成员变量(注释为@XmlIDREF和@xmldattribute)是一个接口): 这是我在尝试运行它时得到的例外: com.sun.xml.internal.bind.v2.runtime.非法注释异
我使用CXF2.7.5调用Web服务。我使用wsdl2java程序(在命令行MSDOS和maven中)生成了客户机类。我必须使用xmlbeans数据绑定,因为使用jaxb(默认数据绑定)时会出现一些错误,并且无法修改服务器端。因此,使用xmlbeans数据绑定参数,生成就可以了。 我用以下方法调用web方法: ... 当我调用webmethods时,它可以在简单的java程序上完美地工作,但在po
我越来越熟悉Java使用Jax-ws(或JAXB,不确定,反正...)的网络服务。 我用一个单一的网络服务创建了一个小项目。WS有唯一的endpoint,称为传输,并返回继承ITransferResult接口的对象。 Web服务合同 Web服务实现 转让结果合同 转移结果实现 当我发布我的Web服务时,我得到以下错误: 异常线程"main"javax.xml.ws.WebServiceExctur
我是一个初学者,刚刚开始学习Spring Batch。我在这里按照这个教程创建了一个helloworld示例。当我按照教程操作时,我在尝试将导入java类时遇到了一个问题。因此我在网上搜索,发现我需要在build.gradle.中添加一些东西。问题是,即使我在build.gradle中添加了依赖项,我仍然有导入的错误消息。我正在使用EclipseJavaEE IDE 4.5.0(Mars)来完成这
假设我需要依赖一个Spring bean的几个实现。我有一个接口和两个实现:和。 下面的注入将使用哪个实现?
处理器接口 在服务端,处理器接口用来把服务跟具体的服务器绑定在一起。在这里,服务是指独立于具体传输协议的 RPC 服务,它是由 Service 类型实现的。而具体的服务器是指 http,tcp,udp,websocket 等服务器,这些服务器是由语言本身所提供的标准库、第三方类库或框架实现的。 在 C# 中,该接口定义如下: public interface IHandler<T> { T