![](/img/trans.png)
[英]CXF-Jetty error: java.lang.IllegalStateException: No SessionManager
[英]jaxws and apache cxf and glassfish 5 error: java.lang.IllegalStateException: The lifecycle method [finalizeConfig] must not throw a checked exception
我之前看到過這個和其他類似的問題,他們的解決方案沒有解決我的問題,因為 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 運行時。
這是我的網絡服務類:
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
文件夾中。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.