jaxws和apache cxf以及glassfish 5错误:java.lang.illegalstateexception:生命周期方法[finalizeconfig]不能抛出选中的异常

ubof19bj  于 2021-06-30  发布在  Java
关注(0)|答案(1)|浏览(326)

我以前看到过这个和其他类似的问题,他们的解决方案并没有解决我的问题,因为glassfish5有很多变化。
我正在运行soap web服务,出现以下错误:

java.lang.IllegalStateException: The lifecycle method [finalizeConfig] must not throw a checked exception. Related annotation information: annotation [@javax.annotation.PostConstruct()] on annotated element [public void org.apache.cxf.transport.http_jetty.spring.JettyHTTPServerEngineBeanDefinitionParser$SpringJettyHTTPServerEngine.finalizeConfig() throws java.security.GeneralSecurityException,java.io.IOException] of type [METHOD]
    at com.sun.enterprise.deployment.archivist.Archivist.readAnnotations(Archivist.java:503)
    at com.sun.enterprise.deployment.archivist.Archivist.readAnnotations(Archivist.java:423)
    at org.glassfish.web.deployment.archivist.WebArchivist.postAnnotationProcess(WebArchivist.java:317)
    at org.glassfish.web.deployment.archivist.WebArchivist.postAnnotationProcess(WebArchivist.java:68)
    at com.sun.enterprise.deployment.archivist.Archivist.readRestDeploymentDescriptors(Archivist.java:397)
    at com.sun.enterprise.deployment.archivist.Archivist.readDeploymentDescriptors(Archivist.java:372)
    at com.sun.enterprise.deployment.archivist.Archivist.open(Archivist.java:247)
    at com.sun.enterprise.deployment.archivist.Archivist.open(Archivist.java:256)
    at com.sun.enterprise.deployment.archivist.Archivist.open(Archivist.java:217)
    at com.sun.enterprise.deployment.archivist.ApplicationFactory.openArchive(ApplicationFactory.java:137)
    at org.glassfish.javaee.core.deployment.DolProvider.processDOL(DolProvider.java:183)
    at org.glassfish.javaee.core.deployment.DolProvider.load(DolProvider.java:207)
    at org.glassfish.javaee.core.deployment.DolProvider.load(DolProvider.java:73)
    at com.sun.enterprise.v3.server.ApplicationLifecycle.loadDeployer(ApplicationLifecycle.java:857)
    at com.sun.enterprise.v3.server.ApplicationLifecycle.setupContainerInfos(ApplicationLifecycle.java:797)
    at com.sun.enterprise.v3.server.ApplicationLifecycle.deploy(ApplicationLifecycle.java:354)
    at com.sun.enterprise.v3.server.ApplicationLifecycle.deploy(ApplicationLifecycle.java:195)
...

我使用的是glassfish 5.1.0和apachecxf3.3.5,我的ide是eclipseee版本:2019-12(4.14.0)
我下载了apachecxf二进制发行版并添加到eclipsecxf运行时。
这是我的web服务类:

package com.web.service;

import javax.jws.WebMethod; 
import javax.jws.WebService; 

@WebService(targetNamespace = "localhost:8080")
public class Service { 
    @WebMethod public String greet(String name) { 
        return "Hi," + name; 
    }
}
jei2mxaa

jei2mxaa1#

这个 org.apache.cxf.transport.http_jetty.spring 当部署到glassfish时,包会导致问题。您需要将其从cxf二进制发行版中删除。
请尝试以下步骤:
首先从eclipse中的项目中删除原始的二进制发行版。
然后,您需要使用一些归档工具(可能您使用的操作系统已经包含一些内容)打开二进制发行版,并导航到 lib 存档中的文件夹。删除文件 cxf-rt-transports-http-jetty-*.jar . 然后将更改后的二进制分布添加到您的项目中,就像您以前使用原始二进制分布时所做的那样。
也许这已经足够了。如果没有,还有一步你可以尝试。
它或多或少与您已链接的解决方案相同。但是,我不确定glassfish5.1是否仍然接受 sun-web.xml 文件。它应该被命名为 glassfish-web.xml 现在。
所以创建文件 glassfish-web.xml 包括以下内容:
(如果您已经有了该文件,只需添加 <class-loader delegate="true"/> (与之连接)

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE glassfish-web-app PUBLIC "-//GlassFish.org//DTD GlassFish Application Server 3.1 Servlet 3.0//EN" "http://glassfish.org/dtds/glassfish-web-app_3_0-1.dtd">
<glassfish-web-app>
  <class-loader delegate="true"/>
</glassfish-web-app>

把文件放进 WEB-INF war文件的文件夹。

相关问题