[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