4 Replies Latest reply on Feb 12, 2017 12:17 AM by psks

    JBoss Web Services client code throws Error.

    aupres

      Hello, I am using Eclipse 4.4 Luna and WildFly 9.0.0-Alpha and try to deploy JBoss Web services. My reference site is

       

      [JBWS-3748] Wildfly 8 ws-security client throws exception - JBoss Issue Tracker

       

      In Eclipse Luna IDE, related jar files are endorsed with build path menu and the endorsed jar files names are

       

      cxf-rt-ws-security-3.0.1.jar (to import SecurityConstants class)

      jboss-jaxws-api_2.2_spec-2.0.2.Final.jar

      jbossws-api-1.0.3.CR1.jar (to import @PolicySets and @EndpointConfig annotation)

      jbossws-cxf-factories-5.0.0.Beta1.jar

      wss4j-ws-security-common-2.0.1.jar (to import WSPasswordCallback class)

       

      Deployemt is successful. WSDL with ws-security is generated.

      I make 2 types of client codes, application code and jsp file. The codes are below

       

      ====== SOAPClient.java

      package com.aaa.soap;

      import java.net.URL;

      import javax.xml.namespace.QName;
      import javax.xml.ws.BindingProvider;
      import javax.xml.ws.Service;

      import org.apache.cxf.ws.security.SecurityConstants; // I think this import line is wrong!

       

      public class SOAPClient {

      private final String serviceURL = "http://localhost:8080/SOAPSecureWeb/HelloWorld";

      private IHelloWorld proxy;

      public SOAPClient() {
        try {
         QName serviceName = new QName("http://www.aaa.com/jbossws/ws-extensions/wssecurity", "HelloWorldService");

         URL wsdlURL;
       
         wsdlURL = new URL(serviceURL + "?wsdl");
         Service service = Service.create(wsdlURL, serviceName);
         proxy = (IHelloWorld) service.getPort(IHelloWorld.class);

         ((BindingProvider) proxy).getRequestContext().put(SecurityConstants.CALLBACK_HANDLER, new KeystorePasswordCallback());
         ((BindingProvider) proxy).getRequestContext().put(SecurityConstants.SIGNATURE_PROPERTIES, Thread.currentThread().getContextClassLoader().getResource("META-INF/client.properties"));
         ((BindingProvider) proxy).getRequestContext().put(SecurityConstants.ENCRYPT_PROPERTIES, Thread.currentThread().getContextClassLoader().getResource("META-INF/client.properties"));
         ((BindingProvider) proxy).getRequestContext().put(SecurityConstants.SIGNATURE_USERNAME, "client");
         ((BindingProvider) proxy).getRequestContext().put(SecurityConstants.ENCRYPT_USERNAME, "server");
        } catch (Exception e) {
         // TODO Auto-generated catch block
         e.printStackTrace();
        }
      } // the constructor throws no exception.

      public String callMethd(String name) {
        return proxy.sayHello(name); // this method throws exception
      }

      public static void main(String[] args) {
        // TODO Auto-generated method stub
        SOAPClient tc= new SOAPClient();
        String result=tc.callMethd("Joseph");
        System.out.println(result);
      }
      }

       

      This application code throws the following exception

       

      Exception in thread "main" java.util.ServiceConfigurationError: javax.xml.ws.spi.Provider: Provider org.jboss.wsf.stack.cxf.client.ProviderImpl not found

      at java.util.ServiceLoader.fail(Unknown Source)

      at java.util.ServiceLoader.access$300(Unknown Source)

      at java.util.ServiceLoader$LazyIterator.next(Unknown Source)

      at java.util.ServiceLoader$1.next(Unknown Source)

      at javax.xml.ws.spi.Provider.getProviderUsingServiceLoader(Unknown Source)

      at javax.xml.ws.spi.Provider.provider(Unknown Source)

      at javax.xml.ws.Service.<init>(Unknown Source)

      at javax.xml.ws.Service.create(Unknown Source)

      at com.aaa.soap.SOAPClient.<init>(SOAPClient.java:24)

      at com.aaa.soap.SOAPClient.main(SOAPClient.java:44)

       

      This time I make jsp client code like below

      ======= index.jsp

      <%@ page language="java" contentType="text/html; charset=EUC-KR" pageEncoding="EUC-KR"%>

      <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">

      <%@ page import="java.net.URL"%>
      <%@ page import="javax.xml.namespace.QName"%>
      <%@ page import="javax.xml.ws.BindingProvider"%>
      <%@ page import="javax.xml.ws.Service"%>
      <%@ page import="org.apache.cxf.ws.security.SecurityConstants"%> // I think this import line is also wrong!

      <%@ page import="com.aaa.soap.IHelloWorld"%>
      <%@ page import="com.aaa.soap.KeystorePasswordCallback"%>

      <html>
      <head>
      <meta http-equiv="Content-Type" content="text/html; charset=EUC-KR">
      <title>SOAP client</title>
      </head>
      <body>
      <%
      String serviceURL = "http://localhost:8080/SOAPSecureWeb/HelloWorld";

      IHelloWorld proxy;

      try {
      QName serviceName = new QName("http://www.aaa.com/jbossws/ws-extensions/wssecurity", "HelloWorldService");

      URL wsdlURL;
       
      wsdlURL = new URL(serviceURL + "?wsdl");
      Service service = Service.create(wsdlURL, serviceName);
      proxy = (IHelloWorld) service.getPort(IHelloWorld.class);

      ((BindingProvider) proxy).getRequestContext().put(SecurityConstants.CALLBACK_HANDLER, new KeystorePasswordCallback());
      ((BindingProvider) proxy).getRequestContext().put(SecurityConstants.SIGNATURE_PROPERTIES, Thread.currentThread().getContextClassLoader().getResource("META-INF/client.properties"));
      ((BindingProvider) proxy).getRequestContext().put(SecurityConstants.ENCRYPT_PROPERTIES, Thread.currentThread().getContextClassLoader().getResource("META-INF/client.properties"));
      ((BindingProvider) proxy).getRequestContext().put(SecurityConstants.SIGNATURE_USERNAME, "client");
      ((BindingProvider) proxy).getRequestContext().put(SecurityConstants.ENCRYPT_USERNAME, "server");

      out.println(proxy.sayHello("Joseph"));
      } catch (Exception e) {
      // TODO Auto-generated catch block
      e.printStackTrace();
      }
      %>
      </body>
      </html>

       

      This jsp file throws the following error

      JBWEB004061: An error occurred at line: 10 in the generated java file
      Only a type can be imported. org.apache.cxf.ws.security.SecurityConstants resolves to a package

       

      JBWEB004060: An error occurred at line: 34 in the jsp file: /index.jsp
      SecurityConstants.CALLBACK_HANDLER cannot be resolved to a type
      31:  Service service = Service.create(wsdlURL, serviceName);
      32:  proxy = (IHelloWorld) service.getPort(IHelloWorld.class);
      33:
      34:  ((BindingProvider) proxy).getRequestContext().put(SecurityConstants.CALLBACK_HANDLER, new KeystorePasswordCallback());
      35:  ((BindingProvider) proxy).getRequestContext().put(SecurityConstants.SIGNATURE_PROPERTIES, Thread.currentThread().getContextClassLoader().getResource("META-INF/client.properties"));
      36:  ((BindingProvider) proxy).getRequestContext().put(SecurityConstants.ENCRYPT_PROPERTIES, Thread.currentThread().getContextClassLoader().getResource("META-INF/client.properties"));
      37:  ((BindingProvider) proxy).getRequestContext().put(SecurityConstants.SIGNATURE_USERNAME, "client");


      JBWEB004060: An error occurred at line: 35 in the jsp file: /index.jsp
      SecurityConstants.SIGNATURE_PROPERTIES cannot be resolved to a type
      32:  proxy = (IHelloWorld) service.getPort(IHelloWorld.class);
      33:
      34:  ((BindingProvider) proxy).getRequestContext().put(SecurityConstants.CALLBACK_HANDLER, new KeystorePasswordCallback());
      35:  ((BindingProvider) proxy).getRequestContext().put(SecurityConstants.SIGNATURE_PROPERTIES, Thread.currentThread().getContextClassLoader().getResource("META-INF/client.properties"));
      36:  ((BindingProvider) proxy).getRequestContext().put(SecurityConstants.ENCRYPT_PROPERTIES, Thread.currentThread().getContextClassLoader().getResource("META-INF/client.properties"));
      37:  ((BindingProvider) proxy).getRequestContext().put(SecurityConstants.SIGNATURE_USERNAME, "client");
      38:  ((BindingProvider) proxy).getRequestContext().put(SecurityConstants.ENCRYPT_USERNAME, "server");


      JBWEB004060: An error occurred at line: 36 in the jsp file: /index.jsp
      SecurityConstants.ENCRYPT_PROPERTIES cannot be resolved to a type
      33:
      34:  ((BindingProvider) proxy).getRequestContext().put(SecurityConstants.CALLBACK_HANDLER, new KeystorePasswordCallback());
      35:  ((BindingProvider) proxy).getRequestContext().put(SecurityConstants.SIGNATURE_PROPERTIES, Thread.currentThread().getContextClassLoader().getResource("META-INF/client.properties"));
      36:  ((BindingProvider) proxy).getRequestContext().put(SecurityConstants.ENCRYPT_PROPERTIES, Thread.currentThread().getContextClassLoader().getResource("META-INF/client.properties"));
      37:  ((BindingProvider) proxy).getRequestContext().put(SecurityConstants.SIGNATURE_USERNAME, "client");
      38:  ((BindingProvider) proxy).getRequestContext().put(SecurityConstants.ENCRYPT_USERNAME, "server");
      39:


      JBWEB004060: An error occurred at line: 37 in the jsp file: /index.jsp
      SecurityConstants.SIGNATURE_USERNAME cannot be resolved to a type
      34:  ((BindingProvider) proxy).getRequestContext().put(SecurityConstants.CALLBACK_HANDLER, new KeystorePasswordCallback());
      35:  ((BindingProvider) proxy).getRequestContext().put(SecurityConstants.SIGNATURE_PROPERTIES, Thread.currentThread().getContextClassLoader().getResource("META-INF/client.properties"));
      36:  ((BindingProvider) proxy).getRequestContext().put(SecurityConstants.ENCRYPT_PROPERTIES, Thread.currentThread().getContextClassLoader().getResource("META-INF/client.properties"));
      37:  ((BindingProvider) proxy).getRequestContext().put(SecurityConstants.SIGNATURE_USERNAME, "client");
      38:  ((BindingProvider) proxy).getRequestContext().put(SecurityConstants.ENCRYPT_USERNAME, "server");
      39: 
      40:  out.println(proxy.sayHello("Joseph"));


      JBWEB004060: An error occurred at line: 38 in the jsp file: /index.jsp
      SecurityConstants.ENCRYPT_USERNAME cannot be resolved to a type
      35:  ((BindingProvider) proxy).getRequestContext().put(SecurityConstants.SIGNATURE_PROPERTIES, Thread.currentThread().getContextClassLoader().getResource("META-INF/client.properties"));
      36:  ((BindingProvider) proxy).getRequestContext().put(SecurityConstants.ENCRYPT_PROPERTIES, Thread.currentThread().getContextClassLoader().getResource("META-INF/client.properties"));
      37:  ((BindingProvider) proxy).getRequestContext().put(SecurityConstants.SIGNATURE_USERNAME, "client");
      38:  ((BindingProvider) proxy).getRequestContext().put(SecurityConstants.ENCRYPT_USERNAME, "server");
      39: 
      40:  out.println(proxy.sayHello("Joseph"));
      41: } catch (Exception e) {


      JBWEB004211: Stacktrace:
      at org.apache.jasper.compiler.DefaultErrorHandler.javacError(DefaultErrorHandler.java:85) [jastow-1.0.1.Final.jar:1.0.1.Final]
      at org.apache.jasper.compiler.ErrorDispatcher.javacError(ErrorDispatcher.java:69) [jastow-1.0.1.Final.jar:1.0.1.Final]
      at org.apache.jasper.compiler.JDTCompiler.generateClass(JDTCompiler.java:451) [jastow-1.0.1.Final.jar:1.0.1.Final]
      at org.apache.jasper.compiler.Compiler.compile(Compiler.java:361) [jastow-1.0.1.Final.jar:1.0.1.Final]
      at org.apache.jasper.compiler.Compiler.compile(Compiler.java:339) [jastow-1.0.1.Final.jar:1.0.1.Final]
      at org.apache.jasper.compiler.Compiler.compile(Compiler.java:326) [jastow-1.0.1.Final.jar:1.0.1.Final]
      at org.apache.jasper.JspCompilationContext.compile(JspCompilationContext.java:604) [jastow-1.0.1.Final.jar:1.0.1.Final]
      at org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:309) [jastow-1.0.1.Final.jar:1.0.1.Final]
      at org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:326) [jastow-1.0.1.Final.jar:1.0.1.Final]
      at org.apache.jasper.servlet.JspServlet.service(JspServlet.java:259) [jastow-1.0.1.Final.jar:1.0.1.Final]
      at javax.servlet.http.HttpServlet.service(HttpServlet.java:790) [jboss-servlet-api_3.1_spec-1.0.0.Final.jar:1.0.0.Final]
      at io.undertow.servlet.handlers.ServletHandler.handleRequest(ServletHandler.java:85) [undertow-servlet-1.1.0.Beta7.jar:1.1.0.Beta7]
      at io.undertow.servlet.handlers.security.ServletSecurityRoleHandler.handleRequest(ServletSecurityRoleHandler.java:61) [undertow-servlet-1.1.0.Beta7.jar:1.1.0.Beta7]
      at io.undertow.servlet.handlers.ServletDispatchingHandler.handleRequest(ServletDispatchingHandler.java:36) [undertow-servlet-1.1.0.Beta7.jar:1.1.0.Beta7]
      at org.wildfly.extension.undertow.security.SecurityContextAssociationHandler.handleRequest(SecurityContextAssociationHandler.java:78)
      at io.undertow.server.handlers.PredicateHandler.handleRequest(PredicateHandler.java:43) [undertow-core-1.1.0.Beta7.jar:1.1.0.Beta7]
      at io.undertow.servlet.handlers.security.SSLInformationAssociationHandler.handleRequest(SSLInformationAssociationHandler.java:131) [undertow-servlet-1.1.0.Beta7.jar:1.1.0.Beta7]
      at io.undertow.servlet.handlers.security.ServletAuthenticationCallHandler.handleRequest(ServletAuthenticationCallHandler.java:56) [undertow-servlet-1.1.0.Beta7.jar:1.1.0.Beta7]
      at io.undertow.server.handlers.PredicateHandler.handleRequest(PredicateHandler.java:43) [undertow-core-1.1.0.Beta7.jar:1.1.0.Beta7]
      at io.undertow.security.handlers.AbstractConfidentialityHandler.handleRequest(AbstractConfidentialityHandler.java:45) [undertow-core-1.1.0.Beta7.jar:1.1.0.Beta7]
      at io.undertow.servlet.handlers.security.ServletConfidentialityConstraintHandler.handleRequest(ServletConfidentialityConstraintHandler.java:61) [undertow-servlet-1.1.0.Beta7.jar:1.1.0.Beta7]
      at io.undertow.security.handlers.AuthenticationMechanismsHandler.handleRequest(AuthenticationMechanismsHandler.java:58) [undertow-core-1.1.0.Beta7.jar:1.1.0.Beta7]
      at io.undertow.servlet.handlers.security.CachedAuthenticatedSessionHandler.handleRequest(CachedAuthenticatedSessionHandler.java:70) [undertow-servlet-1.1.0.Beta7.jar:1.1.0.Beta7]
      at io.undertow.security.handlers.SecurityInitialHandler.handleRequest(SecurityInitialHandler.java:76) [undertow-core-1.1.0.Beta7.jar:1.1.0.Beta7]
      at io.undertow.server.handlers.PredicateHandler.handleRequest(PredicateHandler.java:43) [undertow-core-1.1.0.Beta7.jar:1.1.0.Beta7]
      at org.wildfly.extension.undertow.security.jacc.JACCContextIdHandler.handleRequest(JACCContextIdHandler.java:61)
      at io.undertow.server.handlers.PredicateHandler.handleRequest(PredicateHandler.java:43) [undertow-core-1.1.0.Beta7.jar:1.1.0.Beta7]
      at io.undertow.server.handlers.PredicateHandler.handleRequest(PredicateHandler.java:43) [undertow-core-1.1.0.Beta7.jar:1.1.0.Beta7]
      at io.undertow.servlet.handlers.ServletInitialHandler.handleFirstRequest(ServletInitialHandler.java:259) [undertow-servlet-1.1.0.Beta7.jar:1.1.0.Beta7]
      at io.undertow.servlet.handlers.ServletInitialHandler.dispatchRequest(ServletInitialHandler.java:246) [undertow-servlet-1.1.0.Beta7.jar:1.1.0.Beta7]
      at io.undertow.servlet.handlers.ServletInitialHandler.access$000(ServletInitialHandler.java:75) [undertow-servlet-1.1.0.Beta7.jar:1.1.0.Beta7]
      at io.undertow.servlet.handlers.ServletInitialHandler$1.handleRequest(ServletInitialHandler.java:165) [undertow-servlet-1.1.0.Beta7.jar:1.1.0.Beta7]
      at io.undertow.server.Connectors.executeRootHandler(Connectors.java:197) [undertow-core-1.1.0.Beta7.jar:1.1.0.Beta7]
      at io.undertow.server.HttpServerExchange$1.run(HttpServerExchange.java:737) [undertow-core-1.1.0.Beta7.jar:1.1.0.Beta7]
      at java.util.concurrent.ThreadPoolExecutor.runWorker(Unknown Source) [rt.jar:1.7.0_60]
      at java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source) [rt.jar:1.7.0_60]
      at java.lang.Thread.run(Unknown Source) [rt.jar:1.7.0_60]

       

      It seems this codes import wrong jar files. Pls, inform me which jar files have to be imported or whether I miss something.

      Any advice will be deeply appreciated. Thanks