Hello All, I am trying to do a simple WS that requires a user/password and has encryption. I have the user/password working and the server (i think) is doing encryption but I cannot get my client to use the jboss-wsse-client.xml file. Here is all my code, step by step.
SERVER: jboss-wsse-server.xml | <?xml version="1.0" encoding="UTF-8"?> | | <jboss-ws-security xmlns="http://www.jboss.com/ws-security/config" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" | xsi:schemaLocation="http://www.jboss.com/ws-security/config http://www.jboss.com/ws-security/schema/jboss-ws-security_1_0.xsd"> | <key-store-file>META-INF/wsse.keystore</key-store-file> | <key-store-password>jbossws</key-store-password> | <trust-store-file>META-INF/wsse.truststore</trust-store-file> | <trust-store-password>jbossws</trust-store-password> | <config> | <sign type="x509v3" alias="wsse"/> | <requires> | <signature/> | </requires> | </config> | </jboss-ws-security> | ServerHandler.xml | <?xml version="1.0" encoding="UTF-8"?> | | <handler-config> | <handler-chain> | <handler-chain-name>SecureHandlerChain</handler-chain-name> | <handler> | <handler-name>WSSecurityHandlerInbound</handler-name> | <handler-class>org.jboss.ws.extensions.security.jaxws.WSSecurityHandlerServer</handler-class> | </handler> | </handler-chain> | </handler-config> | Server Source: TestMagicRemoteInterface.java | import javax.ejb.Local; | import javax.ejb.Remote; | | @Local | @Remote | public interface TestMagicRemoteInterface { | String pullFromHat(String input); | } | TestMagicBean.java | import javax.annotation.PostConstruct; | import javax.annotation.security.RolesAllowed; | import javax.ejb.Local; | import javax.ejb.Remote; | import javax.ejb.Stateless; | import javax.jws.WebMethod; | import javax.jws.WebResult; | import javax.jws.WebService; | import javax.jws.HandlerChain; | import javax.jws.soap.SOAPBinding; | | import org.jboss.annotation.ejb.RemoteBinding; | import org.jboss.annotation.security.SecurityDomain; | import org.jboss.ws.annotation.WebContext; | | @WebService(name = "EndpointInterface", | targetNamespace = "http://com.test.www/test/jsr181ejb", | serviceName = "MagicService") | @SOAPBinding(style = SOAPBinding.Style.RPC) | @Local(TestMagicRemoteInterface.class) | @Remote(TestMagicRemoteInterface.class) | @RolesAllowed("internal") | @Stateless | @RemoteBinding(jndiBinding = "/ejb3/TestMagician") | @WebContext(authMethod="BASIC", transportGuarantee="NONE", secureWSDLAccess=false) | @SecurityDomain(value="JBossWS") | @HandlerChain(file="resource://config/ServerHandler.xml", name="SecureHandlerChain") | public class TestMagicBean implements TestMagicRemoteInterface { | | @WebMethod(operationName="PullFromHat") | @WebResult(name = "hat") | public String pullFromHat(String input) { | return "White Rabbit--"+input; | } | } | build.xml | <?xml version="1.0" encoding="UTF-8"?> | <project default="dist" basedir="." name="JBossWS-Tests"> | <property file="${basedir}/build.properties"/> | | <property name="dist.dir" value="${basedir}/dist"/> | <property name="bin.dir" value="${basedir}/bin"/> | <property name="src.dir" value="${basedir}/src"/> | <property name="conf.dir" value="${basedir}/conf"/> | <property name="keystore.dir" value="${basedir}/keystore"/> | | <property name="jboss.client" value="${jboss40.home}/client"/> | <property name="jboss.deploy" value="${jboss40.home}/server/${jboss.server.instance}"/> | | <available classname="java.lang.Enum" property="HAVE_JDK_1.5"/> | | <target name="check-jvm"> | <fail message="jdk-1.5 is required" unless="HAVE_JDK_1.5"/> | </target> | | <target name="prepare-classpath" depends="check-jvm"> | <path id="core.classpath"> | <pathelement location="${jboss40.home}/lib/jboss-common.jar"/> | <pathelement location="${jboss40.home}/lib/jboss-jmx.jar"/> | <pathelement location="${jboss40.home}/lib/jboss-system.jar"/> | <pathelement location="${jboss40.home}/lib/jboss-xml-binding.jar"/> | </path> | <path id="jbossws.classpath"> | <fileset dir="${jboss.deploy}/deploy/jbossws.sar"> | <include name="*.jar"/> | </fileset> | <pathelement location="${jboss.client}/jbossws-client.jar"/> | <pathelement location="${jboss.client}/jboss-jaxrpc.jar"/> | <pathelement location="${jboss.client}/jboss-saaj.jar"/> | </path> | <path id="ejb3.classpath"> | <fileset dir="${jboss.deploy}/deploy/ejb3.deployer"> | <include name="*.jar"/> | </fileset> | <pathelement location="${jboss.client}/jboss-ejb3-client.jar"/> | <pathelement location="${jboss.deploy}/lib/jboss-j2ee.jar"/> | </path> | <path id="wstools.classpath"> | <pathelement location="${jboss.client}/jboss-xml-binding.jar"/> | <pathelement location="${jboss.client}/activation.jar"/> | <pathelement location="${jboss.client}/javassist.jar"/> | <pathelement location="${jboss.client}/jbossall-client.jar"/> | <pathelement location="${jboss.client}/jbossretro-rt.jar"/> | <pathelement location="${jboss.client}/jboss-backport-concurrent.jar"/> | <pathelement location="${jboss.client}/jbossws-client.jar"/> | <pathelement location="${jboss.client}/log4j.jar"/> | <pathelement location="${jboss.client}/mail.jar"/> | </path> | <path id="build.classpath"> | <path refid="core.classpath"/> | <path refid="jbossws.classpath"/> | <path refid="ejb3.classpath"/> | </path> | </target> | | <target name="wstools" depends="prepare-classpath"> | <taskdef name="wstools" classname="org.jboss.ws.tools.ant.wstools" | classpathref="wstools.classpath"/> | | </target> | | | <target name="compile" depends="prepare-classpath"> | <delete dir="${bin.dir}"/> | <mkdir dir="${bin.dir}"/> | <javac destdir="${bin.dir}"> | <src path="${src.dir}"/> | <classpath refid="build.classpath"/> | </javac> | </target> | | <target name="package" depends="compile"> | <delete dir="${dist.dir}"/> | <mkdir dir="${dist.dir}"/> | <jar destfile="${dist.dir}/${project.name}.jar"> | <zipfileset dir="${bin.dir}"> | <include name="**"/> | </zipfileset> | <zipfileset dir="${conf.dir}" prefix="config"> | <include name="ServerHandler.xml"/> | </zipfileset> | <zipfileset dir="${conf.dir}" prefix="META-INF"> | <include name="jboss-wsse-server.xml"/> | </zipfileset> | <zipfileset dir="${keystore.dir}" prefix="META-INF"> | <include name="wsse.*"/> | </zipfileset> | </jar> | </target> | | | <target name="dist" depends="package"> | <echo message="Preparing Dist"/> | </target> | </project> | Everything above builds and deploys and expects the client to use wsse:Security Client Code: jboss-wsse-client.jar | <?xml version="1.0" encoding="UTF-8"?> | | <jboss-ws-security xmlns="http://www.jboss.com/ws-security/config" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" | xsi:schemaLocation="http://www.jboss.com/ws-security/config http://www.jboss.com/ws-security/schema/jboss-ws-security_1_0.xsd"> | <key-store-file>c:/work/workspace/TestWebServicesClient/keystore/wsse.keystore</key-store-file> | <key-store-password>jbossws</key-store-password> | <trust-store-file>c:/work/workspace/TestWebServicesClient/keystore/wsse.truststore</trust-store-file> | <trust-store-password>jbossws</trust-store-password> | <config> | <sign type="x509v3" alias="wsse"/> | <requires> | <encryption/> | </requires> | </config> | </jboss-ws-security> | wstools-config.xml | <?xml version="1.0" encoding="UTF-8"?> | | <configuration xmlns="http://www.jboss.org/jbossws-tools" | xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" | xsi:schemaLocation="http://www.jboss.org/jbossws-tools http://www.jboss.org/jbossws-tools/schema/jbossws-tool_1_0.xsd"> | <wsdl-java file="http://localhost:8080/MagicService/TestMagicBean?wsdl"> | | </wsdl-java> | </configuration> | ClientTest.java | import java.net.URL; | import java.util.Map; | | import javax.xml.namespace.QName; | import javax.xml.ws.BindingProvider; | | import com.client.MagicService; | import com.client.EndpointInterface; | | public class ClientTest { | | public static void main(String[] args) { | System.setProperty("org.jboss.wsse.keyStore", "c:/work/workspace/TestWebServicesClient/keystore/wsse.keystore"); | System.setProperty("org.jboss.wsse.keyStorePassword", "jbossws"); | System.setProperty("org.jboss.wsse.keyStoreType", "x509v3"); | System.setProperty("org.jboss.wsse.trustStore", "c:/work/workspace/TestWebServicesClient/keystore/wsse.truststore"); | System.setProperty("org.jboss.wsse.trustStorePassword", "jbossws"); | System.setProperty("org.jboss.wsse.trustStoreType", "x509v3"); | | | try { | System.out.println("Hello World, I'm about to do magic"); | MagicService service = new MagicService(); | EndpointInterface port = service.getEndpointInterfacePort(); | BindingProvider bindingProvider = (BindingProvider) port; | Map<String, Object> reqContext = bindingProvider.getRequestContext(); | reqContext.put(BindingProvider.USERNAME_PROPERTY, "myuser"); | reqContext.put(BindingProvider.PASSWORD_PROPERTY, "mypassword"); | | System.out.println(port.pullFromHat("Java Client Test")); | | } catch (Exception e) { | e.printStackTrace(); | } | | } | | } | build.xml | <?xml version="1.0" encoding="UTF-8"?> | <project default="dist" basedir="." name="JBossWS-Tests"> | <property file="${basedir}/build.properties"/> | | <property name="dist.dir" value="${basedir}/dist"/> | <property name="bin.dir" value="${basedir}/bin"/> | <property name="src.dir" value="${basedir}/src"/> | <property name="conf.dir" value="${basedir}/conf"/> | <property name="keystore.dir" value="${basedir}/keystore"/> | <property name="thirdparty.dir" value="${basedir}/thirdparty"/> | | <property name="jboss.client" value="${jboss40.home}/client"/> | <property name="jboss.deploy" value="${jboss40.home}/server/${jboss.server.instance}"/> | | <available classname="java.lang.Enum" property="HAVE_JDK_1.5"/> | | <target name="check-jvm"> | <fail message="jdk-1.5 is required" unless="HAVE_JDK_1.5"/> | </target> | | <target name="prepare-classpath" depends="check-jvm"> | <path id="core.classpath"> | <pathelement location="${jboss40.home}/lib/jboss-common.jar"/> | <pathelement location="${jboss40.home}/lib/jboss-jmx.jar"/> | <pathelement location="${jboss40.home}/lib/jboss-system.jar"/> | <pathelement location="${jboss40.home}/lib/jboss-xml-binding.jar"/> | </path> | <path id="jbossws.classpath"> | <fileset dir="${jboss.deploy}/deploy/jbossws.sar"> | <include name="*.jar"/> | </fileset> | <pathelement location="${jboss.client}/jbossws-client.jar"/> | <pathelement location="${jboss.client}/jboss-jaxrpc.jar"/> | <pathelement location="${jboss.client}/jboss-saaj.jar"/> | </path> | <path id="ejb3.classpath"> | <fileset dir="${jboss.deploy}/deploy/ejb3.deployer"> | <include name="*.jar"/> | </fileset> | <pathelement location="${jboss.client}/jboss-ejb3-client.jar"/> | <pathelement location="${jboss.deploy}/lib/jboss-j2ee.jar"/> | </path> | <path id="wstools.classpath"> | <pathelement location="${jboss.client}/jboss-xml-binding.jar"/> | <pathelement location="${jboss.client}/activation.jar"/> | <pathelement location="${jboss.client}/javassist.jar"/> | <pathelement location="${jboss.client}/jbossall-client.jar"/> | <pathelement location="${jboss.client}/jbossretro-rt.jar"/> | <pathelement location="${jboss.client}/jboss-backport-concurrent.jar"/> | <pathelement location="${jboss.client}/jbossws-client.jar"/> | <pathelement location="${jboss.client}/log4j.jar"/> | <pathelement location="${jboss.client}/mail.jar"/> | <path refid="core.classpath"/> | <path refid="jbossws.classpath"/> | <path refid="ejb3.classpath"/> | </path> | <path id="build.classpath"> | <path refid="core.classpath"/> | <path refid="jbossws.classpath"/> | <path refid="ejb3.classpath"/> | </path> | <path id="client.classpath"> | <fileset dir="${jboss.client}"> | <include name="*.jar"/> | </fileset> | <path refid="core.classpath"/> | <path refid="jbossws.classpath"/> | <path refid="ejb3.classpath"/> | <pathelement location="${jboss40.home}/lib/endorsed/xercesImpl.jar"/> | </path> | </target> | | <target name="wstools" depends="prepare-classpath"> | | <taskdef name="wstools" classname="org.jboss.ws.tools.ant.wstools" | classpathref="wstools.classpath"/> | <!-- <wstools dest="${bin.dir}" config="conf/wstools-config.xml"/> --> | <taskdef name="wsconsume" classname="org.jboss.ws.tools.jaxws.ant.wsconsume"> | <classpath refid="wstools.classpath"/> | <classpath location="${thirdparty.dir}/jbossws-wsconsume-impl.jar"/> | <classpath location="${thirdparty.dir}/jaxb-xjc.jar"/> | </taskdef> | <wsconsume wsdl="http://localhost:8080/MagicService/TestMagicBean?wsdl" package="com.client" sourcedestdir="${src.dir}" keep="true"/> | | | </target> | | | <target name="compile" depends="prepare-classpath"> | <delete dir="${bin.dir}"/> | <mkdir dir="${bin.dir}"/> | <javac destdir="${bin.dir}"> | <src path="${src.dir}"/> | <classpath refid="build.classpath"/> | </javac> | </target> | | <target name="package" depends="compile"> | <delete dir="${dist.dir}"/> | <mkdir dir="${dist.dir}"/> | <jar destfile="${dist.dir}/${project.name}-Client.jar"> | <manifest> | <attribute name="Main-Class" value="ClientTest"/> | </manifest> | <zipfileset dir="${bin.dir}"> | <include name="**"/> | </zipfileset> | <zipfileset dir="${conf.dir}" prefix="META-INF"> | <include name="jboss-wsse-client.xml"/> | </zipfileset> | </jar> | </target> | | | <target name="dist" depends="package"> | <echo message="Preparing Dist"/> | </target> | | <target name="run" depends="dist"> | <echo message="About To RUN"/> | | | <java classname="ClientTest" fork="true"> | <classpath> | <pathelement location="${dist.dir}/${project.name}-Client.jar"/> | <fileset dir="${jboss.client}"> | <include name="*.jar"/> | </fileset> | <pathelement location="${jboss40.home}/lib/endorsed/xercesImpl.jar"/> | </classpath> | </java> | </target> | </project> | Jar File structure: | META-INF | jboss-wsse-client.xml | Manifest.mf | ClientTest.class | com | client | MagicService.class | EndpointInterface.class | My above code works if I do not include the jboss-wsse-server.xml but once I add it, the client fails. I do know that I had to add the HandlerChain to the server class for things to work, is there something similar that I have to do to the client? Thanks, Richard K View the original post : http://www.jboss.com/index.html?module=bb&op=viewtopic&p=4033861#4033861 Reply to the post : http://www.jboss.com/index.html?module=bb&op=posting&mode=reply&p=4033861 _______________________________________________ jboss-user mailing list [email protected] https://lists.jboss.org/mailman/listinfo/jboss-user
