java.util.List是一个接口,JAXB无法处理接口

尝试部署应用程序时,似乎出现以下异常:

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

这是部分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) {

......

......

......

}

我要注意一些事情。我将所有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部分。

以上是 java.util.List是一个接口,JAXB无法处理接口 的全部内容, 来源链接: utcz.com/qa/416850.html

回到顶部