[jboss-user] [JBossWS] - WebServiceRef & HandlerChain annotations

egelke do-not-reply at jboss.com
Sun Oct 28 06:24:16 EDT 2007


I think I found a bug with the way the HandlerChain annotation is implemented in JBossWS 2.0.1.SP2 on JBoss 4.2.2

It happends when I use @HandlerChain in the following condition:
1) A field in a Stateless Session Bean
2) The type of the field is the port type
3) The field is annotated with @WebServiceRef

An example of the declaration:

  | @HandlerChain(file = "MyWsClient_HandlerChains.xml")
  | @WebServiceRef(name = "ws/MyWs", wsdlLocation = "META-INF/wsdl/MyWs.wsdl")
  | private MyWsPort wsPort;
  | 

In that case I get the following errror:

  | Caused by: org.jboss.ws.WSException: Cannot resolve handler file 'be/egelke/MyWsClient_HandlerChains.xml' on javax.xml.ws.Service
  |         at org.jboss.ws.metadata.builder.jaxws.JAXWSMetaDataBuilder.getHandlerChainsMetaData(JAXWSMetaDataBuilder.java:235)
  |         at org.jboss.ws.core.jaxws.spi.ServiceDelegateImpl.<init>(ServiceDelegateImpl.java:150)
  |         at org.jboss.ws.core.jaxws.spi.ProviderImpl.createServiceDelegate(ProviderImpl.java:61)
  |         at javax.xml.ws.Service.<init>(Service.java:83)
  |         at javax.xml.ws.Service.create(Service.java:721)
  |         at org.jboss.ws.core.jaxws.client.ServiceObjectFactoryJAXWS.getObjectInstance(ServiceObjectFactoryJAXWS.java:135)
  |         at javax.naming.spi.NamingManager.getObjectInstance(NamingManager.java:304)
  |         at org.jnp.interfaces.NamingContext.getObjectInstance(NamingContext.java:1273)
  |         at org.jnp.interfaces.NamingContext.getObjectInstanceWrapFailure(NamingContext.java:1290)
  |         ... 143 more
  | 

I did check the code and found the following on the line specified in the above exception:

  | // Try the filename relative to class
  | if (fileURL == null)
  | {
  |    String filepath = filename;
  |    String packagePath = wsClass.getPackage().getName().replace('.', '/');
  |    String resourcePath = packagePath + "/" + filepath;
  |    while (filepath.startsWith("../"))
  |    {
  |       packagePath = packagePath.substring(0, packagePath.lastIndexOf("/"));
  |       filepath = filepath.substring(3);
  |       resourcePath = packagePath + "/" + filepath;
  |    }
  |    fileURL = wsClass.getClassLoader().getResource(resourcePath);
  | }
  | 
  | if (fileURL == null)
  |    throw new WSException("Cannot resolve handler file '" + filename + "' on " + wsClass.getName());
  | 

As you can see, the above tries the load my handler file with the classloader from the javax.xml.ws.Service class.  Obviously, my handler file can't be found.

Is there a way that I can make it work or is this a bug or limitation?

I did find some ways to get arround the problem, but all have there disadvantages:

  | 1) Replace the Port class of the field by the Service Client class: requires extra code which complicates unit testing.
  | 2) Specify the correct service implementation class: only available in JBoss 5.0
  | 

View the original post : http://www.jboss.com/index.html?module=bb&op=viewtopic&p=4099646#4099646

Reply to the post : http://www.jboss.com/index.html?module=bb&op=posting&mode=reply&p=4099646



More information about the jboss-user mailing list