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

加载应用程序时出现Glassfish 4.0异常,Java . lang . illegalstateexception

凌经赋
2023-03-14

我是网络服务和玻璃鱼的新手。这是我的代码

package ws.mypkg;

import java.util.ArrayList;
import java.util.List;

import javax.jws.WebMethod;
import javax.jws.WebService;
import javax.jws.soap.SOAPBinding;
import javax.jws.soap.SOAPBinding.Style;

@WebService
@SOAPBinding(style=Style.RPC)
public class TestRPC {

    // This seems to cause the problem when a List is returned.
    public List<String> testRPC () {
        List<String> l = new ArrayList<String>();
        l.add("Hello");
        return l;
    }

    // This method work fine
    public String testRPC1 () {
        return "Testing RPC";
    }
}

如果我有

@SOAPBinding(style=Style.RPC)

当我尝试部署web服务时,我得到以下错误。

无法部署TestGF部署失败=部署期间发生错误:加载应用程序时出现异常:java.lang.IllegalStateException:ContainerBase。addChild:开始:org.apache.catalina。LifecycleException:java.lang.RuntimeException:Servlet web服务终结点“”失败。请参阅服务器。日志以获取更多详细信息。

服务器日志没有更多内容。

当我注释掉< code>@SOAPBinding(style=Style。RPC)

问题似乎出在第一种方法上。如果我排除第一种方法,第二种方法部署正常。当我从该方法返回列表并且我有@SOAPBinding(style=Style.RPC)时,似乎我遇到了这个问题

我正在使用Glassfish 4.0、jdk 1.7和Eclipse(与Spring 3.4捆绑在一起)

共有1个答案

鲜于谦
2023-03-14

问题是您的方法返回类型是一个接口,而< code>JAXB不能使用接口,因为它不知道使用哪个< code>List实现。

要修复它,只需将方法的返回类型更改为ArrayList,如下所示:

public ArrayList<String> testRPC () {
    ArrayList<String> l = new ArrayList<String>();
    l.add("Hello");
    return l;
}

正如错误消息所暗示的那样,可以在服务器.log中找到更多信息。应该有这样的内容:

Caused by: com.sun.xml.bind.v2.runtime.IllegalAnnotationsException: 1 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

如果发生类似的错误,这将为您指出正确的方向。

另请参见:

  • java.util。列表是一个接口,JAXB无法处理接口
 类似资料: