ClassNotFoundException: com.sun.xml.wss.XWSSecurityException是什么意思?

4
我有一个现有的基于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”,以及“sjsxp”的“1.0.2”版本。应用程序启动后,如果我提供了无效密码,就会出现身份验证错误。如果我提供正确的凭据,应用程序会正常响应。这是我想要在最新版本的这些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>

但是第二个“xmldsig”在Maven仓库中缺失。我可以下载并手动将其添加到我的本地m2 repo中,但我希望以适当的方式解决它。在搜索时,我看到了这个主题。有人谈论了一个替代方案。http://maven.40175.n5.nabble.com/where-to-get-xmldsig-1-0-jar-td92435.html

enter image description here

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

enter image description here

现在我的问题是,需要避免/添加什么才能使应用程序使用最新版本的jars启动?希望一切顺利。

你能否发布你的pom.xml依赖项(不是图片)? - kuhajeyan
有时候我也会遇到“找不到类”的异常,这通常是当我尝试修改Maven依赖项时发生的。 - Renjith
1
您IP地址为143.198.54.68,由于运营成本限制,当前对于免费用户的使用频率限制为每个IP每72小时10次对话,如需解除限制,请点击左下角设置图标按钮(手机用户先点击左上角菜单按钮)。 - AntJavaDev
那些给出负评的人,请提供一个有效的解释,这样我就可以添加更多细节并改进问题。 - Renjith
2
我不明白你真正想要什么。有很多信息,但没有明确的问题。 - J Fabian Meier
@JFMeier。感谢您的评论。我应该从别人的角度考虑问题。我已经更新了问题,并尽力让其他人理解情况。 - Renjith
2个回答

11
有时候,为了调试这些问题,你需要成为一个软件考古学家。
看一下 spring-ws-security:2.4.0.RELEASE 的 pom 文件,你会发现 xws-security:3.0 依赖是可选的(还有其他的)。你需要阅读 spring-ws-security 文档以确定应该包括哪些可选的依赖项。
假设你已经决定需要 xws-security 模块,你需要查看 它的 pom 文件,这就需要进行考古工作。该模块可以追溯到2008年,那个时期仍在支持Java 5。Java 6(和/或Java EE)及更高版本支持此构件依赖列表中的所有API。将它们包含在你的构建或部署构件中,会导致麻烦。
因此,你应该将它们排除掉:
<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>

谢谢。我还没有测试的机会。我会试一下并回复你。 - Renjith
哇!!!太棒了。非常感谢。那个起作用了。你能详细解释一下你的答案吗?我想完全理解它。我不理解这部分内容:“这个模块可以追溯到2008年,当时Java 5仍然得到支持。Java 6(和/或Java EE)及更高版本支持此工件依赖列表中的所有API。在您的构建或部署工件中包含其中任何一个都会带来痛苦。” - Renjith

0

尝试使用 spring-ws-security:2.4.0.RELEASEspring version 4.3.3.RELEASE


昨天问题的标题是 java.lang.NoSuchMethodError: SpelParserConfiguration.<init>,此问题的堆栈跟踪为 `(MSC service thread 1-4) StandardWrapper.Throwable: java.lang.NoSuchMethodError: org.springframework.expression.spel.SpelParserConfiguration.‌​(Lorg/springframewor‌​k/expression/spel/Sp‌​elCompilerMode;Ljava‌​/lang/ClassLoader;)V at org.springframework.context.expression.StandardBeanExpressio‌​nResolver.(StandardB‌​eanExpressionResolve‌​r.java:98) [spring-context-4.3.2.RELEASE.jar:4.3.2.RELEASE]。 - Issam El-atif
如果问题已经解决,请接受帮助您解决问题的答案,然后为新问题创建一个新的提问。如果问题仍未解决,请更新问题并提供有用的细节,保留旧标题和旧堆栈跟踪信息。 - Issam El-atif
1
问题还没有解决。当我创建了一个带有所选依赖项的示例应用程序时,错误并没有改变。因此,我更新了问题。现在我得到的错误是一致的。 - Renjith

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接