我有一个现有的基于SOAP的Web服务,并尝试使用“XwsSecurityInterceptor”和“SpringDigestPasswordValidationCallbackHandler”实现Spring Web服务安全性。这是我的Spring配置的样子。
我正在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中包含以下依赖项。
作为我的研发的一部分,我使用旧版本(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”。
现在这迫使我添加两个更多的依赖项。我也添加了它们。
但是第二个“xmldsig”在Maven仓库中缺失。我可以下载并手动将其添加到我的本地m2 repo中,但我希望以适当的方式解决它。在搜索时,我看到了这个主题。有人谈论了一个替代方案。http://maven.40175.n5.nabble.com/where-to-get-xmldsig-1-0-jar-td92435.html
![enter image description here](https://istack.dev59.com/rgvs2.webp)
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”。
所以我想添加那个依赖项。
<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
我看到这个功能在“spring-ws-security:jar”的2.3.0版本中可用。
现在我的问题是,需要避免/添加什么才能使应用程序使用最新版本的jars启动?希望一切顺利。