当前位置: 首页 > 知识库问答 >
问题:

java.lang.非法状态异常: No Server ALPN处理器 - WireMock

戚锦
2023-03-14

我正在尝试在我的maven项目上运行单元测试(使用Wiremck),并观察到以下错误。

java.lang.IllegalStateException: No Server ALPNProcessors

我尝试将alpn-boot-8.1.12.v20180117.jar添加到Xbootclasspath中,如下所示

-Xbootclasspath/p:/path/to/alpn-boot-8.1.12.v20180117.jar

并已将其放在我的项目的.mvn目录中的jvm.config文件中,并验证它是否是通过执行ps -ef |grep Xboot类路径设置的,但我仍然收到相同的错误。

它在带有Java 8 u191的Windows机器上工作,并且没有添加任何Xboot类路径,但在带有Java 8 u181的Linux上却不起作用。

我还尝试向我的< code>pom.xml添加以下依赖项

<dependency>
    <groupId>org.eclipse.jetty</groupId>
    <artifactId>jetty-alpn-server</artifactId>
    <version>9.4.20.v20190813</version>
    <scope>test</scope>
</dependency>

但仍然不起作用。

pom.xml

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>

    <build>
        <plugins>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-compiler-plugin</artifactId>
                <version>${maven.compiler.version}</version>
                <configuration>
                    <source>8</source>
                    <target>8</target>
                </configuration>
            </plugin>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-surefire-plugin</artifactId>
                <version>3.0.0-M3</version>
                <configuration>
                    <workingDirectory>${real.base.dir}</workingDirectory>
                    <systemProperties>
                        <log4j.configurationFile>${basedir}/src/test/resources/log4j.xml</log4j.configurationFile>
                    </systemProperties>
                </configuration>
            </plugin>
            <plugin>
                <groupId>org.jacoco</groupId>
                <artifactId>jacoco-maven-plugin</artifactId>
                <version>${jacoco.version}</version>
                <executions>
                    <execution>
                        <goals>
                            <goal>prepare-agent</goal>
                        </goals>
                    </execution>
                    <!-- attached to Maven test phase -->
                    <execution>
                        <id>report</id>
                        <phase>test</phase>
                        <goals>
                            <goal>report</goal>
                        </goals>
                    </execution>
                </executions>
            </plugin>
            <plugin>
                <groupId>com.googlecode.addjars-maven-plugin</groupId>
                <artifactId>addjars-maven-plugin</artifactId>
                <version>1.0.5</version>
                <executions>
                    <execution>
                        <goals>
                            <goal>add-jars</goal>
                        </goals>
                        <configuration>
                            <resources>
                                <resource>
                                    <directory>${basedir}/lib</directory>
                                </resource>
                            </resources>
                        </configuration>
                    </execution>
                </executions>
            </plugin>
        </plugins>
    </build>

    <properties>
        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
        <maven.compiler.version>3.8.1</maven.compiler.version>
        <maven.surefire.version>3.0.0-M3</maven.surefire.version>

        <javax.validation.version>2.0.1.Final</javax.validation.version>
        <syncope.version>2.1.5</syncope.version>
        <resteasy.client.version>4.4.2.Final</resteasy.client.version>
        <jax.rs.version>2.1.1</jax.rs.version>
        <junit.jupiter.version>5.5.2</junit.jupiter.version>

        <jacoco.version>0.8.5</jacoco.version>
        <real.base.dir>${basedir}</real.base.dir>
    </properties>

    <dependencies>

        <dependency>
            <groupId>javax.validation</groupId>
            <artifactId>validation-api</artifactId>
            <version>${javax.validation.version}</version>
        </dependency>

        <dependency>
            <groupId>javax.ws.rs</groupId>
            <artifactId>javax.ws.rs-api</artifactId>
            <version>${jax.rs.version}</version>
        </dependency>

        <dependency>
            <groupId>org.jboss.resteasy</groupId>
            <artifactId>resteasy-client</artifactId>
            <version>${resteasy.client.version}</version>
        </dependency>

        <dependency>
            <groupId>org.jboss.resteasy</groupId>
            <artifactId>resteasy-jaxb-provider</artifactId>
            <version>${resteasy.client.version}</version>
        </dependency>

        <dependency>
            <groupId>org.jboss.resteasy</groupId>
            <artifactId>resteasy-client</artifactId>
            <version>4.4.2.Final</version>
        </dependency>

        <dependency>
            <groupId>org.syncope.identityconnectors</groupId>
            <artifactId>framework</artifactId>
            <version>0.4.3</version>
        </dependency>


        <!-- Start Test dependencies -->
        <dependency>
            <groupId>org.junit.jupiter</groupId>
            <artifactId>junit-jupiter</artifactId>
            <version>${junit.jupiter.version}</version>
            <scope>test</scope>
        </dependency>
        <dependency>
            <groupId>com.github.tomakehurst</groupId>
            <artifactId>wiremock-jre8</artifactId>
            <version>2.25.1</version>
            <scope>test</scope>
        </dependency>
        <dependency>
            <groupId>org.mockito</groupId>
            <artifactId>mockito-core</artifactId>
            <version>3.2.4</version>
            <scope>test</scope>
        </dependency>

        <!-- End Test dependencies -->
    </dependencies>

</project>

共有3个答案

姜鸿
2023-03-14

为了避免新版本的wiremock出现< code > No Server ALPNProcessors 错误,例如

<dependency>
    <groupId>com.github.tomakehurst</groupId>
    <artifactId>wiremock-jre8</artifactId>
    <version>2.30.1</wiremock.version>
</dependency>
    

您可以尝试以下依赖项。

对于JDK 9和更高版本

<dependency>  
    <groupId>org.eclipse.jetty</groupId>
    <artifactId>jetty-alpn-server</artifactId>
    <version>${jetty.version}</version>
</dependency>
<dependency>
    <groupId>org.eclipse.jetty</groupId>
    <artifactId>jetty-alpn-java-server</artifactId>
    <version>${jetty.version}</version>
</dependency>

参考文献:
https://github.com/eclipse/jetty.project/issues/1894 https://www.eclipse.org/jetty/documentation/jetty-9/index.html#alpn-jdk9型

对于JDK 8

<dependency>  
    <groupId>org.eclipse.jetty</groupId>
    <artifactId>jetty-alpn-server</artifactId>
    <version>${jetty.version}</version>
</dependency>
<dependency>
    <groupId>org.eclipse.jetty</groupId>
    <artifactId>jetty-alpn-openjdk8-server</artifactId>
    <version>${jetty.version}</version>
</dependency>

参考文献:
https://github.com/eclipse/jetty.project/issues/1894https://www.eclipse.org/jetty/documentation/jetty-9/index.html#alpn-openjdk8

斜俊
2023-03-14

把wiremck改成老版解决这个问题


<dependency>
    <groupId>com.github.tomakehurst</groupId>
    <artifactId>wiremock-jre8</artifactId>
    <version>2.21.0</version>
    <scope>test</scope>
</dependency>
<!-- Needed for the SSLContextFactory$Client class -->
<dependency>
    <groupId>org.eclipse.jetty</groupId>
    <artifactId>jetty-util</artifactId>
    <version>9.4.14.v20181114</version>
    <scope>test</scope>
</dependency>

简而言之,新版jetty将利用alpn模块,而jdk8没有这个模块。详情请参考https://github.com/jetty-project/jetty-alpn

常小白
2023-03-14

以防万一任何M1 Mac用户像我一样偶然发现此页面。

我的问题-

我的带有wiremock测试的Spring启动项目可以在我的旧英特尔mac上运行,但当我转移到我的新M1 Mac上时就无法运行了。

_ _

我有两条错误信息

  • java.lang.IllegalStateException:没有服务器ALPNProcessors
  • 禁止显示:java.lang.UnsatisfiedLinkError:no conscrypt_openjdk_jni-osx-aarch_64

修复 -

我需要一个属性来测试应用程序

wiremock.server.httpsPort=-1

 类似资料:
  • 问题内容: 如何将轮询线程传递给另一个线程进行处理。程序执行在具有主方法和线程池的控制器类中: 主类控制器 具有轮询类的线程的方法 具有proc类的线程的方法 轮询类和控制器类 我的任务和问题是: 1.控制器应同时处理轮询器和处理器线程,并且应仅调用轮询器和处理器线程 2.现在我的问题是如何使轮询线程等待3秒并并行通知处理器。 我得到如下错误: 这里如何实现异步处理? 问题答案: 你需要阅读的东西

  • 我正在尝试使用下面的快速加载API 连接…等是完美的。 我确切地知道它在哪里失败 例外情况是 < code >线程“main”Java . lang . illegalstateexception中出现异常:示例失败。 这是我试图上传的表格。它是格式,当我通过记事本打开它时,它看起来像这样 为什么我会得到这个异常?我该如何改进?据我理解问题是< code > pstmtfld . setascii

  • 我正在尝试实现线程,其中一个线程生成随机数,而另一个线程等待,一旦它生成随机数,它应该通知并等待另一个线程也这样做。我收到了非法的监控状态异常,请帮我指出我的错误。

  • 问题内容: 这是我的用法- 另外,我在http GET周围放置了一个finally块- 这是我的堆栈跟踪- 我正在使用Quartz计划监视Http端点的工作。这是我的连接池配置 Maven依赖..工件版本 编辑 -好吧,通过不关闭finally块中的CloseableHttpClient,问题解决了。有人能说出为什么这样吗? 如果关闭客户端,为什么连接池会关闭? 是上面的closeablehttp

  • 这是我如何使用它 - 此外,我已经在超文本传输协议GET周围放置了一个最终块- 这是我的堆栈跟踪- 我正在使用Quartz来安排监控Httpendpoint的工作…这是我的连接池配置 马文依赖..神器版本 编辑-嗯,这个问题通过在最后一个块中不关闭CloseableHttp客户端而得到解决…有人能告诉我为什么它会这样吗?如果我关闭客户端,为什么连接池会关闭? 上面的closeablehttpcli