Solved. I was setting some properties via services.xml but not when using the
API. Setting the service's properties in the servlet implementation solved the
problem.
From: [EMAIL PROTECTED]: [EMAIL PROTECTED]: Thu, 28 Jun 2007 10:51:43
+0200Subject: [xfire-user] JAXB2 unmarshalling problem
(was: [xfire-user] Using external properties file) I'm writing a web service
using XFire 1.2.6 with JAXB2 bindings in a schema-firstdevelopment project.
XFire is configured using the services.xml file and annotationsand all is
working fine. Now I need to start myself the service to set some properties in
the service'simplementation class before exposing it (thanks to Yanick) but it
seems that I'm doingsomething wrong as I got the following exception while
unmarshalling the client request. Nothing changed except the servlet invocation
so I guess I'm doing something wrongbut I can't help myself. Here's the
details: javax.xml.bind.UnmarshalException: unexpected element (uri:"myns",
local:"schemaVer"). Expected elements are
<{myns}getUserID>,<{myns}getUserIDResponse>,... at
com.sun.xml.bind.v2.runtime.unmarshaller.UnmarshallingContext.handleEvent(UnmarshallingContext.java:525)
at
com.sun.xml.bind.v2.runtime.unmarshaller.Loader.reportError(Loader.java:199) at
com.sun.xml.bind.v2.runtime.unmarshaller.Loader.reportError(Loader.java:194) at
com.sun.xml.bind.v2.runtime.unmarshaller.Loader.reportUnexpectedChildElement(Loader.java:71)
at
com.sun.xml.bind.v2.runtime.unmarshaller.UnmarshallingContext$DefaultRootLoader.childElement(UnmarshallingContext.java:922)
at
com.sun.xml.bind.v2.runtime.unmarshaller.UnmarshallingContext._startElement(UnmarshallingContext.java:366)
at
com.sun.xml.bind.v2.runtime.unmarshaller.UnmarshallingContext.startElement(UnmarshallingContext.java:347)
at
com.sun.xml.bind.v2.runtime.unmarshaller.InterningXmlVisitor.startElement(InterningXmlVisitor.java:35)
at
com.sun.xml.bind.v2.runtime.unmarshaller.StAXStreamConnector.handleStartElement(StAXStreamConnector.java:201)
at
com.sun.xml.bind.v2.runtime.unmarshaller.StAXStreamConnector.bridge(StAXStreamConnector.java:135)
at
com.sun.xml.bind.v2.runtime.unmarshaller.UnmarshallerImpl.unmarshal0(UnmarshallerImpl.java:337)
at
com.sun.xml.bind.v2.runtime.unmarshaller.UnmarshallerImpl.unmarshal(UnmarshallerImpl.java:309)
at org.codehaus.xfire.jaxb2.JaxbType.readObject(JaxbType.java:203) at
org.codehaus.xfire.aegis.AegisBindingProvider.readParameter(AegisBindingProvider.java:169)
at
org.codehaus.xfire.service.binding.AbstractBinding.read(AbstractBinding.java:206)
at
org.codehaus.xfire.service.binding.WrappedBinding.readMessage(WrappedBinding.java:51)
at
org.codehaus.xfire.soap.handler.SoapBodyHandler.invoke(SoapBodyHandler.java:42)
at org.codehaus.xfire.handler.HandlerPipeline.invoke(HandlerPipeline.java:131)
at
org.codehaus.xfire.transport.DefaultEndpoint.onReceive(DefaultEndpoint.java:64)
at
org.codehaus.xfire.transport.AbstractChannel.receive(AbstractChannel.java:38)
at
org.codehaus.xfire.transport.http.XFireServletController.invoke(XFireServletController.java:304)
at
org.codehaus.xfire.transport.http.XFireServletController.doService(XFireServletController.java:129)
at
org.codehaus.xfire.transport.http.XFireServlet.doPost(XFireServlet.java:116) at
javax.servlet.http.HttpServlet.service(HttpServlet.java:710) at
javax.servlet.http.HttpServlet.service(HttpServlet.java:803)... Servlet
implementation: import org.codehaus.xfire.jaxb2.JaxbServiceFactory;import
org.codehaus.xfire.service.invoker.ObjectInvoker;import
org.codehaus.xfire.service.Service;import
org.codehaus.xfire.service.invoker.BeanInvoker;import
org.codehaus.xfire.transport.http.XFireServlet;import
javax.servlet.ServletException; public class SOAPServlet extends XFireServlet{
public void init() throws ServletException { super.init();
MyServiceImpl instance = new MyServiceImpl(); //instance.setSomeProperty();
JaxbServiceFactory factory = new
JaxbServiceFactory(getXFire().getTransportManager(), null); Service service
= factory.create(MyService.class, "MyService", null, null);
service.setProperty(ObjectInvoker.SERVICE_IMPL_CLASS, MyServiceImpl.class);
service.setInvoker(new BeanInvoker(instance));
getController().getServiceRegistry().register(service); }} Service interface:
import javax.jws.WebMethod;import javax.jws.WebParam;import
javax.jws.WebService;@WebService(name="MyServiceIntf")public interface
MyService{ @WebMethod getUserIDResponse
getUserID(@WebParam(name="getUserID") getUserID body); @WebMethod ....
Service class implementation: import javax.jws.WebService;import
javax.jws.soap.SOAPBinding;@WebService(serviceName="MyService")@SOAPBinding(parameterStyle=SOAPBinding.ParameterStyle.BARE)public
class MyServiceImpl implements MyService{ //Some properties public
getUserIDResponse getUserID(getUserID body) .... Client request (conformant
to the bounded schema): <getUserId xmlns="myns"> <schemaVer name="tdfschema"
ver="0.2"/> <userInfo> <userID>someuser</userID> <password>somepwd</password>
</userInfo></getUserID>Thanks for any help
2 GB di spazio, protezione da virus e spyware...GRATIS! Windows Live Hotmail
_________________________________________________________________
Sai cosa รจ successo oggi?
http://notizie.msn.it