簡體   English   中英

jaxws 和 apache cxf 和 glassfish 5 錯誤:java.lang.IllegalStateException:生命周期方法 [finalizeConfig] 不能拋出已檢查的異常

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM