gpt4 book ai didi

java.lang.ClassNotFoundException : com. sun.xml.wss.XWSSecurityException

转载 作者:行者123 更新时间:2023-12-01 07:20:22 25 4
gpt4 key购买 nike

我有一个现有的基于 SOAP 的 Web 服务,并且我正在尝试使用“XwsSecurityInterceptor”和“SpringDigestPasswordValidationCallbackHandler”在其中实现 Spring Web 服务安全性。这就是我的 spring 配置的样子。 enter image description here

我正在 JBoss7.1 AS 中部署此应用程序。当应用程序启动时,会引发以下异常。它提示找不到“com.sun.xml.wss.XWSSecurityException”。

org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'org.springframework.ws.soap.addressing.server.AnnotationActionEndpointMapping#0': Invocation of init method failed; nested exception is java.lang.NoClassDefFoundError: com/sun/xml/wss/XWSSecurityException Caused by: java.lang.ClassNotFoundException: com.sun.xml.wss.XWSSecurityException

现在我正在尝试了解该问题的根本原因。所以我从 POM 文件开始。

以下依赖项位于 pom 中。

<dependency>
<groupId>org.springframework.ws</groupId>
<artifactId>spring-ws-core</artifactId>
<version>${org.springframework.ws.version}</version>
</dependency>
<dependency>
<groupId>org.springframework.ws</groupId>
<artifactId>spring-ws-security</artifactId>
<version>${org.springframework.ws.version}</version>
</dependency>

<dependency>
<groupId>com.sun.xml.wss</groupId>
<artifactId>xws-security</artifactId>
<version>3.0</version>
</dependency>

<dependency>
<groupId>javax.activation</groupId>
<artifactId>activation</artifactId>
<version>1.1.1</version>
</dependency>

<dependency>
<groupId>javax.xml</groupId>
<artifactId>xmldsig</artifactId>
<version>1.0</version>
</dependency>

作为研发的一部分,我使用了旧版本(2.1.2)的“spring-ws-core”和“spring-ws-security”以及“1.0.2”版本的“sjsxp” 。应用程序启动后,当我提供无效密码时出现身份验证错误。如果我提供正确的凭据,应用程序响应良好。这就是我想用这些 Jars 的最新版本实现的目标。

现在我想知道为什么 2.3.0/2.4.0 缺少一个。

所以我尝试了“mvn dependency:tree -Dverbose”,发现 2.1.2 版本附带了“xws-security”。

enter image description here

所以我想到添加该依赖项。

    <dependency>
<groupId>com.sun.xml.wss</groupId>
<artifactId>xws-security</artifactId>
<version>3.0</version>
</dependency>

现在这迫使我再添加两个依赖项。我也添加了这些。

    <dependency>
<groupId>javax.activation</groupId>
<artifactId>activation</artifactId>
<version>1.1.1</version>
</dependency>

<dependency>
<groupId>javax.xml</groupId>
<artifactId>xmldsig</artifactId>
<version>1.0</version>
</dependency>

但是 Maven 存储库中缺少第二个“xmldsig”。我可以下载它并手动将其添加到我的本地 m2 存储库中。但我想以适当的方式解决它。在搜索时我遇到了这个线程。 http://maven.40175.n5.nabble.com/where-to-get-xmldsig-1-0-jar-td92435.html

有人正在讨论替代方案。

enter image description here

我可以看到这在 2.3.0 版本的“spring-ws-security:jar”中可用。

enter image description here

现在我的问题是,需要避免/添加什么才能使应用程序使用最新版本的 jar 启动?手指交叉......

最佳答案

有时您需要成为软件考古学家才能调试这些东西。

查看 pom 中的 spring-ws-security:2.4.0.RELEASE您可以看到 xws-security:3.0 依赖项是可选的(除其他外)。您需要阅读 spring-ws-security 文档来确定应包含哪些可选依赖项。

假设您已决定需要 xws-security 模块,则需要查看 it's pom ,这就是考古学发挥作用的地方。该模块的历史可以追溯到 2008 年,当时 Java 5 仍然受到支持。 Java 6(和/或 Java EE)及更新版本支持此 Artifact 的依赖项列表中的所有 API。将它们中的任何一个包含在您的构建或部署 Artifact 中都会带来痛苦。

因此您应该排除它们:

<dependency>
<groupId>com.sun.xml.wss</groupId>
<artifactId>xws-security</artifactId>
<version>3.0</version>
<exclusions>
<exclusion>
<!-- Part of JDK -->
<groupId>javax.xml.soap</groupId>
<artifactId>saaj-api</artifactId>
</exclusion>
<exclusion>
<!-- Part of Java EE -->
<groupId>javax.mail</groupId>
<artifactId>mail</artifactId>
</exclusion>
<exclusion>
<!-- Part of JDK -->
<groupId>javax.xml.bind</groupId>
<artifactId>jaxb-api</artifactId>
</exclusion>
<exclusion>
<!-- Part of JDK -->
<groupId>javax.xml.stream</groupId>
<artifactId>stax-api</artifactId>
</exclusion>
<exclusion>
<!-- Part of JDK -->
<groupId>javax.xml.crypto</groupId>
<artifactId>xmldsig</artifactId>
</exclusion>
<exclusion>
<!-- Part of JDK -->
<groupId>javax.xml.ws</groupId>
<artifactId>jaxws-api</artifactId>
</exclusion>
</exclusions>
</dependency>

关于java.lang.ClassNotFoundException : com. sun.xml.wss.XWSSecurityException,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40204589/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com