I have the need to set a soap header while hitting a service on a Biztalk server that I'm
integrating with. This lead me to discover the jax-ws "customization file" facility discussed
here...
http://blogs.sun.com/sdimilla/entry/implementing_handlers_using_jaxws_2
...and, since I'm using Netbeans 5.5, I found how to configure a handler by right-clicking
on the Web Service Reference node in question, allowing me to select the simple hello-world
handler class that I had created. (It does nothing but log.)
/*
* BiztalkClientMessageHandler.java
*
* Created on March 5, 2007, 6:46 PM
*
* To change this template, choose Tools | Template Manager
* and open the template in the editor.
*/
package net.nanonation.rccl.handler;
import java.util.Collections;
import java.util.Set;
import javax.xml.namespace.QName;
import javax.xml.soap.SOAPMessage;
import javax.xml.ws.handler.MessageContext;
import javax.xml.ws.handler.soap.SOAPHandler;
import javax.xml.ws.handler.soap.SOAPMessageContext;
import java.util.logging.Logger;
/**
*
* @author pohl
*/
public class BiztalkClientMessageHandler implements SOAPHandler<SOAPMessageContext> {
private static final Logger log = Logger.getLogger("net.nanonation.rccl.handler");
static {
log.info("BiztalkClientMessageHandler: static initializer called.");
}
public boolean handleMessage(SOAPMessageContext messageContext) {
SOAPMessage msg = messageContext.getMessage();
log.info("BiztalkClientMessageHandler: handleMessage() called.");
return true;
}
public Set<QName> getHeaders() {
log.info("BiztalkClientMessageHandler: getHeaders() called.");
return Collections.EMPTY_SET;
}
public boolean handleFault(SOAPMessageContext messageContext) {
log.info("BiztalkClientMessageHandler: handleFault() called.");
return true;
}
public void close(MessageContext context) {
log.info("BiztalkClientMessageHandler: close() called.");
}
}
Netbeans generated the following jax-ws customization file...
<?xml version="1.0" encoding="UTF-8"?>
<bindings
xmlns:xsd="
http://www.w3.org/2001/XMLSchema"
xmlns:jaxb="
http://java.sun.com/xml/ns/jaxb"
xmlns:wsdl="
http://schemas.xmlsoap.org/wsdl/"
xmlns="
http://java.sun.com/xml/ns/jaxws" wsdlLocation="../wsdl/BizTalkWebService.wsdl">
<bindings node="wsdl:definitions" xmlns:jws="
http://java.sun.com/xml/ns/javaee">
<jws:handler-chains>
<jws:handler-chain>
<jws:handler xmlns="
http://java.sun.com/xml/ns/javaee">
<jws:handler-class>net.nanonation.rccl.handler.BiztalkClientMessageHandler</jws:handler-class>
</jws:handler>
</jws:handler-chain>
</jws:handler-chains>
</bindings>
</bindings>
Upon deployment, I got a really nasty StackOverflowError...
BiztalkClientMessageHandler: static initializer called.
java.lang.reflect.InvocationTargetException
at sun.reflect.GeneratedConstructorAccessor155.newInstance(Unknown Source)
at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:27)
at java.lang.reflect.Constructor.newInstance(Constructor.java:494)
at com.sun.enterprise.naming.NamingManagerImpl.initiateInstance(NamingManagerImpl.java:1012)
at com.sun.enterprise.naming.NamingManagerImpl.getClientServiceObject(NamingManagerImpl.java:1052)
at com.sun.enterprise.naming.NamingManagerImpl.lookup(NamingManagerImpl.java:917)
at com.sun.enterprise.naming.java.javaURLContext.lookup(javaURLContext.java:156)
at com.sun.enterprise.naming.SerialContext.lookup(SerialContext.java:307)
at javax.naming.InitialContext.lookup(InitialContext.java:351)
at com.sun.enterprise.util.InjectionManagerImpl._inject(InjectionManagerImpl.java:274)
at com.sun.enterprise.util.InjectionManagerImpl.inject(InjectionManagerImpl.java:193)
at com.sun.enterprise.util.InjectionManagerImpl.injectInstance(InjectionManagerImpl.java:87)
at com.sun.enterprise.webservice.WsUtil.processConfiguredHandlers(WsUtil.java:2357)
at com.sun.enterprise.webservice.WsUtil.configureJAXWSClientHandlers(WsUtil.java:2502)
at com.sun.enterprise.naming.NamingManagerImpl.getClientServiceObject(NamingManagerImpl.java:1129)
at com.sun.enterprise.naming.NamingManagerImpl.lookup(NamingManagerImpl.java:917)
at com.sun.enterprise.naming.java.javaURLContext.lookup(javaURLContext.java:156)
at com.sun.enterprise.naming.SerialContext.lookup(SerialContext.java:307)
at javax.naming.InitialContext.lookup(InitialContext.java:351)
...
at com.sun.enterprise.util.InjectionManagerImpl._inject(InjectionManagerImpl.java:274)
at com.sun.enterprise.util.InjectionManagerImpl.inject(InjectionManagerImpl.java:193)
at com.sun.enterprise.util.InjectionManagerImpl.injectInstance(InjectionManagerImpl.java:87)
at com.sun.enterprise.webservice.WsUtil.processConfiguredHandlers(WsUtil.java:2357)
at com.sun.enterprise.webservice.WsUtil.configureJAXWSClientHandlers(WsUtil.java:2502)
at com.sun.enterprise.naming.NamingManagerImpl.getClientServiceObject(NamingManagerImpl.java:1129)
at com.sun.enterprise.naming.NamingManagerImpl.lookup(NamingManagerImpl.java:917)
at com.sun.enterprise.naming.java.javaURLContext.lookup(javaURLContext.java:156)
at com.sun.enterprise.naming.SerialContext.lookup(SerialContext.java:307)
at javax.naming.InitialContext.lookup(InitialContext.java:351)
at com.sun.enterprise.util.InjectionManagerImpl._inject(InjectionManagerImpl.java:274)
at com.sun.enterprise.util.InjectionManagerImpl.inject(InjectionManagerImpl.java:193)
at com.sun.enterprise.util.InjectionManagerImpl.injectInstance(InjectionManagerImpl.java:87)
at com.sun.enterprise.webservice.WsUtil.processConfiguredHandlers(WsUtil.java:2357)
at com.sun.enterprise.webservice.WsUtil.configureJAXWSClientHandlers(WsUtil.java:2502)
Caused by: java.lang.StackOverflowError
at java.lang.String.indexOf(String.java:1352)
at java.net.URLStreamHandler.parseURL(URLStreamHandler.java:127)
at sun.net.www.protocol.file.Handler.parseURL(Handler.java:50)
at java.net.URL.<init>(URL.java:596)
at java.net.URL.<init>(URL.java:464)
at sun.misc.URLClassPath$FileLoader.getResource(URLClassPath.java:881)
at sun.misc.URLClassPath$FileLoader.findResource(URLClassPath.java:871)
at sun.misc.URLClassPath.findResource(URLClassPath.java:142)
at java.net.URLClassLoader$2.run(URLClassLoader.java:362)
at java.security.AccessController.doPrivileged(Native Method)
at java.net.URLClassLoader.findResource(URLClassLoader.java:359)
at java.lang.ClassLoader.getResource(ClassLoader.java:977)
at java.lang.ClassLoader.getResource(ClassLoader.java:972)
at java.lang.ClassLoader.getResource(ClassLoader.java:972)
at java.lang.ClassLoader.getResource(ClassLoader.java:972)
at java.lang.ClassLoader.getResourceAsStream(ClassLoader.java:1159)
at com.sun.enterprise.loader.EJBClassLoader.getResourceAsStream(EJBClassLoader.java:782)
at org.apache.catalina.loader.WebappClassLoader.getResourceAsStream(WebappClassLoader.java:1229)
at javax.xml.ws.spi.FactoryFinder.find(FactoryFinder.java:83)
at javax.xml.ws.spi.Provider.provider(Provider.java:76)
at javax.xml.ws.Service.<init>(Service.java:57)
at net.nanonation.rccl.client.reservations.Reservations.<init>(Reservations.java:36)
at sun.reflect.GeneratedConstructorAccessor155.newInstance(Unknown Source)
at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:27)
at java.lang.reflect.Constructor.newInstance(Constructor.java:494)
at com.sun.enterprise.naming.NamingManagerImpl.initiateInstance(NamingManagerImpl.java:1012)
at com.sun.enterprise.naming.NamingManagerImpl.getClientServiceObject(NamingManagerImpl.java:1052)
at com.sun.enterprise.naming.NamingManagerImpl.lookup(NamingManagerImpl.java:917)
at com.sun.enterprise.naming.java.javaURLContext.lookup(javaURLContext.java:156)
at com.sun.enterprise.naming.SerialContext.lookup(SerialContext.java:307)
at javax.naming.InitialContext.lookup(InitialContext.java:351)
at com.sun.enterprise.util.InjectionManagerImpl._inject(InjectionManagerImpl.java:274)
at com.sun.enterprise.util.InjectionManagerImpl.inject(InjectionManagerImpl.java:193)
at com.sun.enterprise.util.InjectionManagerImpl.injectInstance(InjectionManagerImpl.java:87)
at com.sun.enterprise.webservice.WsUtil.processConfiguredHandlers(WsUtil.java:2357)
at com.sun.enterprise.webservice.WsUtil.configureJAXWSClientHandlers(WsUtil.java:2502)
at com.sun.enterprise.naming.NamingManagerImpl.getClientServiceObject(NamingManagerImpl.java:1129)
at com.sun.enterprise.naming.NamingManagerImpl.lookup(NamingManagerImpl.java:917)
at com.sun.enterprise.naming.java.javaURLContext.lookup(javaURLContext.java:156)
at com.sun.enterprise.naming.SerialContext.lookup(SerialContext.java:307)
at javax.naming.InitialContext.lookup(InitialContext.java:351)
at com.sun.enterprise.util.InjectionManagerImpl._inject(InjectionManagerImpl.java:274)
at com.sun.enterprise.util.InjectionManagerImpl.inject(InjectionManagerImpl.java:193)
at com.sun.enterprise.util.InjectionManagerImpl.injectInstance(InjectionManagerImpl.java:87)
at com.sun.enterprise.webservice.WsUtil.processConfiguredHandlers(WsUtil.java:2357)
at com.sun.enterprise.webservice.WsUtil.configureJAXWSClientHandlers(WsUtil.java:2502)
at com.sun.enterprise.naming.NamingManagerImpl.getClientServiceObject(NamingManagerImpl.java:1129)
at com.sun.enterprise.naming.NamingManagerImpl.lookup(NamingManagerImpl.java:917)
at com.sun.enterprise.naming.java.javaURLContext.lookup(javaURLContext.java:156)
at com.sun.enterprise.naming.SerialContext.lookup(SerialContext.java:307)
...
at com.sun.enterprise.util.InjectionManagerImpl._inject(InjectionManagerImpl.java:274)
at com.sun.enterprise.util.InjectionManagerImpl.inject(InjectionManagerImpl.java:193)
at com.sun.enterprise.util.InjectionManagerImpl.injectInstance(InjectionManagerImpl.java:87)
at com.sun.enterprise.webservice.WsUtil.processConfiguredHandlers(WsUtil.java:2357)
at com.sun.enterprise.webservice.WsUtil.configureJAXWSClientHandlers(WsUtil.java:2502)
at com.sun.enterprise.naming.NamingManagerImpl.getClientServiceObject(NamingManagerImpl.java:1129)
at com.sun.enterprise.naming.NamingManagerImpl.lookup(NamingManagerImpl.java:917)
at com.sun.enterprise.naming.java.javaURLContext.lookup(javaURLContext.java:156)
at com.sun.enterprise.naming.SerialContext.lookup(SerialContext.java:307)
at javax.naming.InitialContext.lookup(InitialContext.java:351)
at com.sun.enterprise.util.InjectionManagerImpl._inject(InjectionManagerImpl.java:274)
at com.sun.enterprise.util.InjectionManagerImpl.inject(InjectionManagerImpl.java:193)
at com.sun.enterprise.util.InjectionManagerImpl.injectInstance(InjectionManagerImpl.java:87)
Handler net.nanonation.rccl.handler.BiztalkClientMessageHandler instance injection failed : Exception attempting to inject Env-Prop: net.nanonation.rccl.service.NPReservations/service_at_Field-Injectable Resource. Class name = net.nanonation.rccl.service.NPReservations Field name=service_at_javax.jws.WebServiceRef@@@ into class net.nanonation.rccl.handler.BiztalkClientMessageHandler
Handler net.nanonation.rccl.handler.BiztalkClientMessageHandler instance injection failed : Exception attempting to inject Env-Prop: net.nanonation.rccl.service.NPReservations/service_at_Field-Injectable Resource. Class name = net.nanonation.rccl.service.NPReservations Field name=service_at_javax.jws.WebServiceRef@@@ into class net.nanonation.rccl.handler.BiztalkClientMessageHandler
Handler net.nanonation.rccl.handler.BiztalkClientMessageHandler instance injection failed : Exception attempting to inject Env-Prop: net.nanonation.rccl.service.NPReservations/service_at_Field-Injectable Resource. Class name = net.nanonation.rccl.service.NPReservations Field name=service_at_javax.jws.WebServiceRef@@@ into class net.nanonation.rccl.handler.BiztalkClientMessageHandler
Handler net.nanonation.rccl.handler.BiztalkClientMessageHandler instance injection failed : Exception attempting to inject Env-Prop: net.nanonation.rccl.service.NPReservations/service_at_Field-Injectable Resource. Class name = net.nanonation.rccl.service.NPReservations Field name=service_at_javax.jws.WebServiceRef@@@ into class net.nanonation.rccl.handler.BiztalkClientMessageHandler
Handler net.nanonation.rccl.handler.BiztalkClientMessageHandler instance injection failed : Exception attempting to inject Env-Prop: net.nanonation.rccl.service.NPReservations/service_at_Field-Injectable Resource. Class name = net.nanonation.rccl.service.NPReservations Field name=service_at_javax.jws.WebServiceRef@@@ into class net.nanonation.rccl.handler.BiztalkClientMessageHandler
Handler net.nanonation.rccl.handler.BiztalkClientMessageHandler instance injection failed : Exception attempting to inject Env-Prop: net.nanonation.rccl.service.NPReservations/service_at_Field-Injectable Resource. Class name = net.nanonation.rccl.service.NPReservations Field name=service_at_javax.jws.WebServiceRef@@@ into class net.nanonation.rccl.handler.BiztalkClientMessageHandler
Handler net.nanonation.rccl.handler.BiztalkClientMessageHandler instance injection failed : Exception attempting to inject Env-Prop: net.nanonation.rccl.service.NPReservations/service_at_Field-Injectable Resource. Class name = net.nanonation.rccl.service.NPReservations Field name=service_at_javax.jws.WebServiceRef@@@ into class net.nanonation.rccl.handler.BiztalkClientMessageHandler
Handler net.nanonation.rccl.handler.BiztalkClientMessageHandler instance injection failed : Exception attempting to inject Env-Prop: net.nanonation.rccl.service.NPReservations/service_at_Field-Injectable Resource. Class name = net.nanonation.rccl.service.NPReservations Field name=service_at_javax.jws.WebServiceRef@@@ into class net.nanonation.rccl.handler.BiztalkClientMessageHandler
Handler net.nanonation.rccl.handler.BiztalkClientMessageHandler instance injection failed : Exception attempting to inject Env-Prop: net.nanonation.rccl.service.NPReservations/service_at_Field-Injectable Resource. Class name = net.nanonation.rccl.service.NPReservations Field name=service_at_javax.jws.WebServiceRef@@@ into class net.nanonation.rccl.handler.BiztalkClientMessageHandler
Handler net.nanonation.rccl.handler.BiztalkClientMessageHandler instance injection failed : Exception attempting to inject Env-Prop: net.nanonation.rccl.service.NPReservations/service_at_Field-Injectable Resource. Class name = net.nanonation.rccl.service.NPReservations Field name=service_at_javax.jws.WebServiceRef@@@ into class net.nanonation.rccl.handler.BiztalkClientMessageHandler
Handler net.nanonation.rccl.handler.BiztalkClientMessageHandler instance injection failed : Exception attempting to inject Env-Prop: net.nanonation.rccl.service.NPReservations/service_at_Field-Injectable Resource. Class name = net.nanonation.rccl.service.NPReservations Field name=service_at_javax.jws.WebServiceRef@@@ into class net.nanonation.rccl.handler.BiztalkClientMessageHandler
java.lang.reflect.InvocationTargetException
at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:39)
at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:27)
at java.lang.reflect.Constructor.newInstance(Constructor.java:494)
at com.sun.enterprise.naming.NamingManagerImpl.initiateInstance(NamingManagerImpl.java:1012)
at com.sun.enterprise.naming.NamingManagerImpl.getClientServiceObject(NamingManagerImpl.java:1052)
at com.sun.enterprise.naming.NamingManagerImpl.lookup(NamingManagerImpl.java:917)
at com.sun.enterprise.naming.java.javaURLContext.lookup(javaURLContext.java:156)
at com.sun.enterprise.naming.SerialContext.lookup(SerialContext.java:307)
at javax.naming.InitialContext.lookup(InitialContext.java:351)
...
at com.sun.enterprise.util.InjectionManagerImpl._inject(InjectionManagerImpl.java:274)
at com.sun.enterprise.util.InjectionManagerImpl.inject(InjectionManagerImpl.java:193)
at com.sun.enterprise.util.InjectionManagerImpl.injectInstance(InjectionManagerImpl.java:87)
at com.sun.enterprise.webservice.WsUtil.processConfiguredHandlers(WsUtil.java:2357)
at com.sun.enterprise.webservice.WsUtil.configureJAXWSClientHandlers(WsUtil.java:2502)
at com.sun.enterprise.naming.NamingManagerImpl.getClientServiceObject(NamingManagerImpl.java:1129)
at com.sun.enterprise.naming.NamingManagerImpl.lookup(NamingManagerImpl.java:917)
at com.sun.enterprise.naming.java.javaURLContext.lookup(javaURLContext.java:156)
at com.sun.enterprise.naming.SerialContext.lookup(SerialContext.java:307)
at javax.naming.InitialContext.lookup(InitialContext.java:351)
at com.sun.enterprise.util.InjectionManagerImpl._inject(InjectionManagerImpl.java:274)
at com.sun.enterprise.util.InjectionManagerImpl.inject(InjectionManagerImpl.java:193)
at com.sun.enterprise.util.InjectionManagerImpl.injectInstance(InjectionManagerImpl.java:87)
at com.sun.enterprise.webservice.WsUtil.processConfiguredHandlers(WsUtil.java:2357)
Caused by: java.lang.StackOverflowError
at java.util.jar.JarFile.getEntry(JarFile.java:204)
at java.util.jar.JarFile.getJarEntry(JarFile.java:187)
at sun.misc.URLClassPath$JarLoader.getResource(URLClassPath.java:674)
at sun.misc.URLClassPath$JarLoader.findResource(URLClassPath.java:663)
at sun.misc.URLClassPath.findResource(URLClassPath.java:142)
at java.net.URLClassLoader$2.run(URLClassLoader.java:362)
at java.security.AccessController.doPrivileged(Native Method)
at java.net.URLClassLoader.findResource(URLClassLoader.java:359)
at java.lang.ClassLoader.getResource(ClassLoader.java:977)
at java.lang.ClassLoader.getResource(ClassLoader.java:972)
at java.lang.ClassLoader.getResource(ClassLoader.java:972)
at java.lang.ClassLoader.getResource(ClassLoader.java:972)
at java.lang.ClassLoader.getResource(ClassLoader.java:972)
at java.lang.ClassLoader.getResourceAsStream(ClassLoader.java:1159)
at com.sun.enterprise.loader.EJBClassLoader.getResourceAsStream(EJBClassLoader.java:782)
at org.apache.catalina.loader.WebappClassLoader.getResourceAsStream(WebappClassLoader.java:1229)
at javax.xml.ws.spi.FactoryFinder.find(FactoryFinder.java:83)
at javax.xml.ws.spi.Provider.provider(Provider.java:76)
at javax.xml.ws.Service.<init>(Service.java:57)
at net.nanonation.rccl.client.biztalkwebservice.BizTalkWebService.<init>(BizTalkWebService.java:38)
at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:39)
at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:27)
at java.lang.reflect.Constructor.newInstance(Constructor.java:494)
at com.sun.enterprise.naming.NamingManagerImpl.initiateInstance(NamingManagerImpl.java:1012)
at com.sun.enterprise.naming.NamingManagerImpl.getClientServiceObject(NamingManagerImpl.java:1052)
... 998 more
Handler net.nanonation.rccl.handler.BiztalkClientMessageHandler instance injection failed : Exception attempting to inject Env-Prop: net.nanonation.rccl.service.NPDataTypes/service_at_Field-Injectable Resource. Class name = net.nanonation.rccl.service.NPDataTypes Field name=service_at_javax.jws.WebServiceRef@@@ into class net.nanonation.rccl.handler.BiztalkClientMessageHandler
Have I done something wrong?
[Message sent by forum member 'pohl' (pohl)]
http://forums.java.net/jive/thread.jspa?messageID=206507