Monday, 15 February 2010

Using Moxy with Metro in tomcat -



Using Moxy with Metro in tomcat -

due company requirements can't utilize glassfish application server. nevertheless utilize moxy. tried new metro-version (https://blogs.oracle.com/mgrebac/entry/metro_2_2_jaxb_2) work tomcat 7. managed bootstrap moxy using spring described in metro documentation (http://metro.java.net/guide/user-guide.html#springa) didn't manage work moxy.

i've tried solution mentioned in metro documentation (http://metro.java.net/2.2/guide/ch17.html) , solution mentioned here (use moxy default jaxb implementation).

but out of next exception:

com.sun.xml.ws.spi.db.databindingexception: unknown jaxbcontext implementation: class org.eclipse.persistence.jaxb.jaxbcontext @ com.sun.xml.ws.spi.db.bindingcontextfactory.getjaxbfactory(bindingcontextfactory.java:207) @ com.sun.xml.ws.spi.db.bindingcontextfactory.create(bindingcontextfactory.java:149) @ com.sun.xml.ws.message.jaxb.jaxbmessage.create(jaxbmessage.java:160) @ com.sun.xml.ws.fault.soapfaultbuilder.createsoap11fault(soapfaultbuilder.java:423) @ com.sun.xml.ws.fault.soapfaultbuilder.createsoapfaultmessage(soapfaultbuilder.java:200) @ com.sun.xml.ws.fault.soapfaultbuilder.createsoapfaultmessage(soapfaultbuilder.java:188) @ com.sun.xml.ws.server.wsendpointimpl$2.process(wsendpointimpl.java:391) @ com.sun.xml.ws.transport.http.httpadapter$httptoolkit.handle(httpadapter.java:640) @ com.sun.xml.ws.transport.http.httpadapter.handle(httpadapter.java:263) @ com.sun.xml.ws.transport.http.servlet.servletadapter.invokeasync(servletadapter.java:218) @ com.sun.xml.ws.transport.http.servlet.wsservletdelegate.doget(wsservletdelegate.java:159) @ com.sun.xml.ws.transport.http.servlet.wsservletdelegate.dopost(wsservletdelegate.java:194) @ com.sun.xml.ws.transport.http.servlet.wsspringservlet.dopost(wsspringservlet.java:52) @ javax.servlet.http.httpservlet.service(httpservlet.java:641) @ javax.servlet.http.httpservlet.service(httpservlet.java:722) @ org.apache.catalina.core.applicationfilterchain.internaldofilter(applicationfilterchain.java:304) @ org.apache.catalina.core.applicationfilterchain.dofilter(applicationfilterchain.java:210) @ org.apache.catalina.core.standardwrappervalve.invoke(standardwrappervalve.java:224) @ org.apache.catalina.core.standardcontextvalve.invoke(standardcontextvalve.java:169) @ org.apache.catalina.authenticator.authenticatorbase.invoke(authenticatorbase.java:472) @ org.apache.catalina.core.standardhostvalve.invoke(standardhostvalve.java:168) @ org.apache.catalina.valves.errorreportvalve.invoke(errorreportvalve.java:100) @ org.apache.catalina.valves.accesslogvalve.invoke(accesslogvalve.java:929) @ org.apache.catalina.core.standardenginevalve.invoke(standardenginevalve.java:118) @ org.apache.catalina.connector.coyoteadapter.service(coyoteadapter.java:405) @ org.apache.coyote.http11.abstracthttp11processor.process(abstracthttp11processor.java:964) @ org.apache.coyote.abstractprotocol$abstractconnectionhandler.process(abstractprotocol.java:515) @ org.apache.tomcat.util.net.jioendpoint$socketprocessor.run(jioendpoint.java:302) @ java.util.concurrent.threadpoolexecutor.runworker(threadpoolexecutor.java:1110) @ java.util.concurrent.threadpoolexecutor$worker.run(threadpoolexecutor.java:603) @ java.lang.thread.run(thread.java:722)

my test webservice was:

@webservice public class testservice { public string sayhello() throws jaxbexception { system.out.println(org.eclipse.persistence.version.getversion()); jaxbcontext c = jaxbcontext.newinstance(testpojo.class); homecoming "hello"; } }

and yes the moxy jars (org.eclipse.persistence.moxy-2.4.0.jar, org.eclipse.persistence.core-2.4.0.jar, org.eclipse.persistence.asm-3.3.1.v201206041142.jar) on classpath.

thx help

jaybee

you can utilize jax-ws provider mechanism leverage eclipselink jaxb (moxy):

example web service

class="lang-java prettyprint-override">import javax.xml.bind.*; import javax.xml.bind.util.jaxbsource; import javax.xml.transform.source; import javax.xml.ws.*; @servicemode(service.mode.payload) @webserviceprovider( portname = "findcustomerport", servicename = "findcustomerservice", targetnamespace = "http://service.jaxws.blog/", wsdllocation = "web-inf/wsdl/findcustomerservice.wsdl") public class findcustomerservice implements provider<source> { private jaxbcontext jaxbcontext; public findcustomerservice() { seek { jaxbcontext = jaxbcontext.newinstance(findcustomerresponse.class, findcustomerrequest.class); } grab (jaxbexception e) { throw new webserviceexception(e); } } @override public source invoke(source request) throws webserviceexception { seek { unmarshaller unmarshaller = jaxbcontext.createunmarshaller(); findcustomerrequest fcrequest = (findcustomerrequest) unmarshaller .unmarshal(request); client customer = new customer(); customer.setid(fcrequest.getarg0()); customer.setfirstname("jane"); customer.setlastname("doe"); findcustomerresponse response = new findcustomerresponse(); response.setvalue(customer); homecoming new jaxbsource(jaxbcontext, response); } grab (jaxbexception e) { throw new webserviceexception(e); } } }

for more information

http://blog.bdoughan.com/2013/02/leveraging-moxy-in-your-web-service-via.html

tomcat moxy java-metro-framework

No comments:

Post a Comment