[jboss-user] [JBoss Web Services] - Web Services class not known in context

Tim Eakins do-not-reply at jboss.com
Tue Apr 6 01:04:31 EDT 2010


Tim Eakins [http://community.jboss.org/people/teakins] created the discussion

"Web Services class not known in context"

To view the discussion, visit: http://community.jboss.org/message/535672#535672

--------------------------------------------------------------
This is probably a simple one, but I'm stuck.  I call a new Web Service, queryByObject, which could return several different objects.

I have the below test case to return a User object.  If I change the method signature to return a User, it works.  If I leave it as an Object, I get 'javax.xml.bind.JAXBException: class pfcommon.data.User nor any of its super class is known to this context.'  Even with the XmlSeeAlso, it just won't add User into the schema.

Any help really appreciated!  I put in all the components that I felt were relevant.  JBoss 5.1.0.

Also, if there's anything else wrong in my style, happy to take comments, this is my first attempt at expanding my working EJBs to also be Web Services.

Thanks,
Tim


*//Interface*

@WebService
@SOAPBinding(style = SOAPBinding.Style.DOCUMENT)
@XmlSeeAlso({pfcommon.data.User.class})
public interface TestConnectionInterface {
...
    /**
     * Select back one value
     */
    @WebMethod
    public Object queryForObject(String queryName, HashMap<String, Object> criteria);
...
}

*//Remote*

@Remote
public interface TestConnectionInterfaceRemote extends TestConnectionInterface { }

*//Implementation*

@Stateless
@WebService(endpointInterface="pfcommon.ejb.library.connect.TestConnectionInterface")
@XmlSeeAlso({pfcommon.data.User.class})
public class TestConnection implements TestConnectionInterfaceRemote, TestConnectionInterfaceLocal, TestConnectionInterface {
...
    @Override
    public Object queryForObject(String queryName, HashMap<String, Object> criteria) {
        l.info("queryName=" + queryName);

        //Simplified sample of something that could happen here
        User ret = new User();

        l.info("queryForObject ret="+ret);
        return ret;
    }
...
}

*//Client*

    public void testWebServiceTestConnectionQuery() throws Exception {
        boolean successfulTest = true;

        String endpointURI = "http://192.168.1.7:6881/PersonalFinancier-PersonalFinancier/TestConnection?wsdl";

        try {
            URL wsdlURL = new URL(endpointURI);
            QName serviceName = new QName("http://connect.ejb.pf/", "TestConnectionService");

            Service service = Service.create(wsdlURL, serviceName);
            TestConnectionInterface tc = service.getPort(TestConnectionInterface.class);
            assertNotNull(tc);

            HashMap<String, Object> filterCriteria = new HashMap<String, Object>();
            filterCriteria.put("username", "bob");

            l.info("Attempting to call dummy queryForObject method");
            User ret = (User) tc.queryForObject(PFConsts.SELECT_USER_BY_ACTIVE, filterCriteria);
            l.info("User = ["+ret+"]");
        } catch (Exception e) {
            e.printStackTrace();
            successfulTest = false;
        }
        assertTrue(successfulTest);
    }


http://192.168.1.7:6881/jbossws/services

Registered Service Endpoints
Endpoint Name     jboss.ws:context=PersonalFinancier-PersonalFinancier,endpoint=TestConnection
Endpoint Address      http://192.168.1.7:6881/PersonalFinancier-PersonalFinancier/TestConnection?wsdl http://192.168.1.7:6881/PersonalFinancier-PersonalFinancier/TestConnection?wsdl
    
http://192.168.1.7:6881/PersonalFinancier-PersonalFinancier/TestConnection?wsdl

<definitions name="TestConnectionService" targetNamespace="http://connect.ejb.pf/">
  <import location="http://192.168.1.7:6881/PersonalFinancier-PersonalFinancier/TestConnection?wsdl&resource=TestConnectionInterface_PortType2174988315873883329.wsdl" namespace="http://connect.library.ejb.pfcommon/"/>

  <service name="TestConnectionService">

    <port binding="ns1:TestConnectionInterfaceBinding" name="TestConnectionPort">
      <soap:address location="http://192.168.1.7:6881/PersonalFinancier-PersonalFinancier/TestConnection"/>
    </port>
  </service>
</definitions>

*//Server Exception*

...
00:40:14,236 INFO  [EJB3EndpointDeployer] Deploy AbstractBeanMetaData at 33435a77{name=jboss.j2ee:ear=PersonalFinancier.ear,jar=PersonalFinancier.jar,name=TestConnection,service=EJB3_endpoint bean=org.jboss.ejb3.endpoint.deployers.impl.EndpointImpl properties=[container] constructor=null autowireCandidate=true}
00:40:14,329 INFO  [SessionSpecContainer] Starting jboss.j2ee:ear=PersonalFinancier.ear,jar=PersonalFinancier.jar,name=TestConnection,service=EJB3
00:40:14,329 INFO  [EJBContainer] STARTED EJB: pf.ejb.connect.TestConnection ejbName: TestConnection
00:40:14,365 INFO  [JndiSessionRegistrarBase] Binding the following Entries in Global JNDI:

        PersonalFinancier/TestConnection/remote - EJB3.x Default Remote Business Interface
        PersonalFinancier/TestConnection/remote-pfcommon.ejb.library.connect.TestConnectionInterfaceRemote - EJB3.x Remote Business Interface
        PersonalFinancier/TestConnection/local - EJB3.x Default Local Business Interface
        PersonalFinancier/TestConnection/local-pfcommon.ejb.library.connect.TestConnectionInterfaceLocal - EJB3.x Local Business Interface

...
00:40:14,670 INFO  [DefaultEndpointRegistry] register: jboss.ws:context=PersonalFinancier-PersonalFinancier,endpoint=TestConnection
00:40:16,225 INFO  [WSDLFilePublisher] WSDL published to: file:/usr/java/jboss-5.1.0.GA-dev/server/pfdev/data/wsdl/PersonalFinancier.ear/PersonalFinancier.jar/TestConnectionService1705653235957235278.wsdl
...
00:40:20,905 WARN  [StatelessBeanContext] EJBTHREE-1337: do not get WebServiceContext property from stateless bean context, it should already have been injected
00:40:20,905 INFO  [STDOUT] Parameter constructor!
00:40:20,905 INFO  [TestConnection] Successful basic connection.  Now returning value [id=null fieldValue=Remote Simple Test].
00:40:20,905 WARN  [StatelessBeanContext] EJBTHREE-1337: do not get WebServiceContext property from stateless bean context, it should already have been injected
00:40:26,754 WARN  [StatelessBeanContext] EJBTHREE-1337: do not get WebServiceContext property from stateless bean context, it should already have been injected
00:40:26,755 INFO  [TestConnection] queryName=selectUserByActive
00:40:26,770 INFO  [TestConnection] queryForObject ret=
00:40:26,770 WARN  [StatelessBeanContext] EJBTHREE-1337: do not get WebServiceContext property from stateless bean context, it should already have been injected
00:40:26,776 ERROR [RequestHandlerImpl] Error processing web service request
org.jboss.ws.WSException: javax.xml.ws.WebServiceException: javax.xml.bind.MarshalException
 - with linked exception:
[javax.xml.bind.JAXBException: class pfcommon.data.User nor any of its super class is known to this context.]
        at org.jboss.ws.WSException.rethrow(WSException.java:68)
        at org.jboss.wsf.stack.jbws.RequestHandlerImpl.handleRequest(RequestHandlerImpl.java:336)
        at org.jboss.wsf.stack.jbws.RequestHandlerImpl.doPost(RequestHandlerImpl.java:205)
        at org.jboss.wsf.stack.jbws.RequestHandlerImpl.handleHttpRequest(RequestHandlerImpl.java:131)
        at org.jboss.wsf.common.servlet.AbstractEndpointServlet.service(AbstractEndpointServlet.java:85)
        at javax.servlet.http.HttpServlet.service(HttpServlet.java:717)
        at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:290)
        at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
        at org.jboss.web.tomcat.filters.ReplyHeaderFilter.doFilter(ReplyHeaderFilter.java:96)
        at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:235)
        at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
        at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:235)
        at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:191)
        at org.jboss.web.tomcat.security.SecurityAssociationValve.invoke(SecurityAssociationValve.java:190)
        ...

Thanks again!

--------------------------------------------------------------

Reply to this message by going to Community
[http://community.jboss.org/message/535672#535672]

Start a new discussion in JBoss Web Services at Community
[http://community.jboss.org/choose-container!input.jspa?contentType=1&containerType=14&container=2044]

-------------- next part --------------
An HTML attachment was scrubbed...
URL: http://lists.jboss.org/pipermail/jboss-user/attachments/20100406/0a515092/attachment.html 


More information about the jboss-user mailing list