trying to use cxf + wss4j using maven. Created both a service and a client without any compilation problems. The service works great in tomcat.
Question: When I run the client code, I get "java.lang.NoSuchMethodError: org.apache.xml.security.utils.I18n.init (Ljava / util / ResourceBundle;) V". This class is in the xmlsec jar, which comes with the cxf distribution.
pom.xml for the maintenance project:
<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> <groupId>userNameTokenService</groupId> <artifactId>userNameTokenService</artifactId> <version>0.0.1-SNAPSHOT</version> <packaging>war</packaging> <dependencies> <dependency> <groupId>org.apache.cxf</groupId> <artifactId>cxf-rt-frontend-jaxws</artifactId> <version>3.0.0</version> </dependency> <dependency> <groupId>org.apache.cxf</groupId> <artifactId>cxf-rt-transports-http</artifactId> <version>3.0.0</version> </dependency> <dependency> <groupId>org.apache.cxf</groupId> <artifactId>cxf-rt-ws-security</artifactId> <version>3.0.0</version> </dependency> <dependency> <groupId>org.apache.ws.security</groupId> <artifactId>wss4j</artifactId> <version>1.6.15</version> </dependency> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-web</artifactId> <version>3.2.6.RELEASE</version> </dependency> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-context</artifactId> <version>3.2.6.RELEASE</version> </dependency> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-core</artifactId> <version>3.2.6.RELEASE</version> </dependency> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-beans</artifactId> <version>3.2.6.RELEASE</version> </dependency> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-expression</artifactId> <version>3.2.6.RELEASE</version> </dependency> </dependencies> <build> <pluginManagement> <plugins> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-war-plugin</artifactId> <configuration> <webXml>WebContent\WEB-INF\web.xml</webXml> </configuration> </plugin> </plugins> </pluginManagement> </build> </project>
pom.xml for client project
<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> <groupId>userNameTokenClient</groupId> <artifactId>userNameTokenClient</artifactId> <version>0.0.1-SNAPSHOT</version> <dependencies> <dependency> <groupId>org.apache.cxf</groupId> <artifactId>cxf-rt-frontend-jaxws</artifactId> <version>3.0.0</version> </dependency> <dependency> <groupId>org.apache.cxf</groupId> <artifactId>cxf-rt-transports-http</artifactId> <version>3.0.0</version> </dependency> <dependency> <groupId>org.apache.cxf</groupId> <artifactId>cxf-rt-ws-security</artifactId> <version>3.0.0</version> </dependency> <dependency> <groupId>org.apache.ws.security</groupId> <artifactId>wss4j</artifactId> <version>1.6.15</version> </dependency> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-context</artifactId> <version>3.2.6.RELEASE</version> </dependency> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-core</artifactId> <version>3.2.6.RELEASE</version> </dependency> </dependencies> <build> <sourceDirectory>src</sourceDirectory> <resources> <resource> <directory>src</directory> <excludes> <exclude>**/*.java</exclude> </excludes> </resource> </resources> <plugins> <plugin> <artifactId>maven-compiler-plugin</artifactId> <version>3.0</version> <configuration> <source>1.6</source> <target>1.6</target> </configuration> </plugin> </plugins> </build> </project>
Edit: Using wss4j to try the username token, client code:
public static void main(String[] args) { ApplicationContext context = new ClassPathXmlApplicationContext("spring-context.xml"); HelloWorld helloworld= (HelloWorld) context.getBean("helloClient"); HelloRequest hreq = new HelloRequest(); hreq.setRequestMsg("This is client"); HelloResponse hres = helloworld.sayHello(hreq); System.out.println(hres.getResponseMsg()); }
Wss4j client configuration:
<beans xmlns="http://www.springframework.org/schema/beans" xmlns:jaxws="http://cxf.apache.org/jaxws" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation=" http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd http://cxf.apache.org/jaxws http://cxf.apache.org/schemas/jaxws.xsd"> <bean id="logInBound" class="org.apache.cxf.interceptor.LoggingInInterceptor" /> <bean id="logOutBound" class="org.apache.cxf.interceptor.LoggingOutInterceptor" /> <jaxws:client id="helloClient" serviceClass="com.ddmwsst.helloworld.HelloWorld" address="http://localhost:8080/userNameTokenService/services/HelloWorld"> <jaxws:inInterceptors> <ref bean="logInBound" /> </jaxws:inInterceptors> <jaxws:outInterceptors> <ref bean="logOutBound" /> <ref bean="outbound-security" /> </jaxws:outInterceptors> </jaxws:client> <bean class="org.apache.cxf.ws.security.wss4j.WSS4JOutInterceptor" id="outbound-security"> <constructor-arg> <map> <entry key="action" value="UsernameToken" /> <entry key="user" value="dummy" /> <entry key="passwordCallbackClass" value="client.ClientPasswordCallback" /> </map> </constructor-arg> </bean> </beans>
Service wss4j config:
<beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:jaxws="http://cxf.apache.org/jaxws" xsi:schemaLocation=" http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd http://cxf.apache.org/jaxws http://cxf.apache.org/schemas/jaxws.xsd"> <import resource="classpath:META-INF/cxf/cxf.xml" /> <import resource="classpath:META-INF/cxf/cxf-servlet.xml" /> <bean id="logInBound" class="org.apache.cxf.interceptor.LoggingInInterceptor" /> <bean id="logOutBound" class="org.apache.cxf.interceptor.LoggingOutInterceptor" /> <bean id="inbound-security" class="org.apache.cxf.ws.security.wss4j.WSS4JInInterceptor"> <constructor-arg> <map> <entry key="action" value="UsernameToken" /> <entry key="passwordCallbackClass" value="server.ServerPasswordCallback" /> </map> </constructor-arg> </bean> <jaxws:endpoint id="helloWorld" implementor="server.HelloWorldImpl" address="/HelloWorld"> <jaxws:inInterceptors> <ref bean="logInBound" /> <ref bean="inbound-security" /> </jaxws:inInterceptors> <jaxws:outInterceptors> <ref bean="logOutBound" /> </jaxws:outInterceptors> </jaxws:endpoint> </beans>
maven-2 jax-ws cxf wss4j
Balaji krishnan
source share