apache cxf和glassfish 5中的jaxws获取java.lang.IllegalStateException:生命周期方法[finalizeConfig]不得抛出已检查的异常

问题描述 投票:0回答:1

在将这个问题标记为重复之前,我是说我以前看过 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; 
    }
} 
java soap glassfish jetty cxf
1个回答
0
投票

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文件夹。

© www.soinside.com 2019 - 2024. All rights reserved.