在将这个问题标记为重复之前,我是说我以前看过 this similar question ,并且该解决方案无法解决我的问题,因为Glassfish 5进行了大量更改。
我正在运行肥皂网络服务并收到此错误:
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和Apache cxf 3.3.5,并且我的IDE是Eclipse EE版本:2019-12(4.14.0)
我下载了Apache CXF二进制发行版,并添加到Eclipse CXF运行时中。
这是我的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;
}
}
org.apache.cxf.transport.http_jetty.spring
程序包在部署到Glassfish时会引起问题。您需要从CXF二进制发行版中删除它。
请尝试以下步骤:
首先从Eclipse中的项目中删除原始的二进制发行版。然后,您需要使用某些存档工具(可能正在使用的操作系统已经包含某些工具)打开二进制分发,并导航至存档中的lib
文件夹。删除文件cxf-rt-transports-http-jetty-*.jar
。然后像以前使用原始二进制分发一样,将更改后的二进制分发添加到项目中。
也许这已经足够了。如果没有,您可以尝试另一步。
或多或少已经与您链接的相同解决方案。但是,我不确定Glassfish 5.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>
将文件放入WAR文件的WEB-INF
文件夹。