Good catch Anders! I had a hunch it may be due to XFire since the WSDL gets generated by that lib. Hopefully this gets resolved in the next release (or two) of SMX so I can test it out. For now I'll stick to my ad-hoc unmarshaller component.
-los Anders Hammar wrote: > > After some more investigation including using plain XFire it seems as the > problem is within XFire. I also found this XFire JIRA: > http://jira.codehaus.org/browse/XFIRE-739 > > > Anders Hammar wrote: >> >> There is a JIRA raised already: >> https://brutus.apache.org/activemq/browse/SM-749 >> I'll try to get the code together to reproduce it and add it to the JIRA. >> >> /Anders >> >> >> gnodet wrote: >>> >>> Would you mind raising a JIRA describing the exact problem >>> and attach the necessary files to reproduce it ? >>> >>> On 11/21/06, moraleslos <[EMAIL PROTECTED]> wrote: >>>> >>>> Hey Anders, >>>> >>>> Thanks for all your help... I've actually went the ad hoc way since I >>>> needed >>>> to get something working. Its actually very easy... 4 extra lines in >>>> my >>>> unmarshalling component... and it works like a charm. Of course I >>>> would >>>> like to do it the JSR181-way since that is what its suppose to do. >>>> >>>> Anyway, I got rid of my little test harness (mainly due to frustration) >>>> so I >>>> won't be able to try out Aegis. Either way, I'd like to stick with >>>> JAXB2 >>>> since we can expose our domain model for other things too, and I'm >>>> getting >>>> pretty familiar with its annotations (great stuff). >>>> >>>> As for the Web Service style, I think I did use wrapped. I always >>>> thought >>>> wrapped was better than doc or rpc. Its more verbose so shouldn't it >>>> be >>>> preferred? >>>> >>>> Yes, I do agree with you on the code-first route. I always think that >>>> our >>>> domain model should be controlled by us and hence will have everything >>>> else >>>> reflect it one way or another. Therefore I prefer the domain --> >>>> schema/wsdl instead of vice-versa and hence will keep the domain model >>>> clean >>>> and precise. All incoming data that will be contained in our domain >>>> must go >>>> through a xsl transformation process and templates are easy to define. >>>> I'm >>>> not a big fan of schema/wsdl --> domain objects simply because of all >>>> the >>>> garbage the domain objects contain. If we are dealing with objects >>>> other >>>> than the domain, and if these objects can be considered *throw-away", >>>> then I >>>> would not mind the schema-first route. >>>> >>>> Hope later versions of smx will have this/these bugs fixed with a >>>> working >>>> example of code --> schema/wsdl (jaxb2) jsr181 example. >>>> >>>> -los >>>> >>>> >>>> >>>> Anders Hammar wrote: >>>> > >>>> > Ok, I spent yesterday getting a dummy scenario up and running and it >>>> > works. However, I had to skip jaxb2 annotations and switch to the >>>> aegis >>>> > binding. The aegis binding don't give all possibilities as jaxb2 >>>> does, but >>>> > at least it works. As I'd like to have my domain pojos in a java >>>> package >>>> > that doesn't match the namespace I must specify the "correct" >>>> namespace in >>>> > the binding (the namespace that the service is within) to work >>>> around the >>>> > namespace bug. >>>> > >>>> > So what I actually have working is getting a message (basically just >>>> a >>>> > string) from a jms queue (in-only) onto an eip pipeline that calls a >>>> > jsr181 service (in-out) that creates a domain object. That domain >>>> object >>>> > is then returned (marshalled to xml) to the pipeline and then passed >>>> onto >>>> > (in-only) another jsr-181 service which prints the domain object by >>>> doing >>>> > .toString(). In the last step the unmarshalling is done by the >>>> framework. >>>> > >>>> > Regarding your error, what style are you using - wrapped (default) or >>>> > document? Could it be that you're using wrapped and that you're >>>> missing >>>> > the operation in the xml passed in? I've switched to document and >>>> don't >>>> > specify the operation but only the in paramater. Like this: >>>> > >>>> > <name xmlns="http://b.a.se/c"> >>>> > AndersHammar >>>> > </name> >>>> > >>>> > In this case I've named my inparamater 'name' by using the >>>> possibilities >>>> > of jsr181 annotation: >>>> > @WebMethod >>>> > @WebResult(name="DummyObject", targetNamespace="http://b.a.se/c") >>>> > public DummyObject getDummyObject(@WebParam(name="name") String >>>> name); >>>> > >>>> > Great that you filed the fire. Either I'm doing something wrong with >>>> jaxb2 >>>> > or there's a bug with smx or XFire using jaxb2 bindings. I thing we >>>> can >>>> > rely on the jaxb2 implementation being ok. Being desperat I also >>>> patched >>>> > the jsr181 component with the latest (v2.0.4) jaxb2 impl. No >>>> difference. >>>> > Important to note is that we're going the code first road and what >>>> the >>>> > schema/wsdl to be generated. However, both me and you want to do xsl >>>> > transformation and for that to be reliable we want to control the >>>> schema >>>> > generation by jaxb2 annotations (at least I want to). Otherwise a new >>>> > jaxb2 implementation could result in a different schema and thus >>>> errors in >>>> > the transformation. >>>> > >>>> > /Anders >>>> > >>>> > >>>> > moraleslos wrote: >>>> >> >>>> >> I spent about a half-a-day deploying various combinations--all of >>>> them >>>> >> still producing the an XFireFault: >>>> "org.codehaus.xfire.fault.XFireFault: >>>> >> Invalid operation: document" >>>> >> >>>> >> However, you're right about the jaxb2 annotations. Removing them >>>> from my >>>> >> POJOs seem to produce a more valid WSDL--all of the types seem to >>>> get >>>> >> generated--but the unmarshalling won't work probably due to the fact >>>> that >>>> >> there are no jaxb2 annotations. >>>> >> >>>> >> Anyway, just wanted to let you know that I posted an issue on JIRA-- >>>> >> https://brutus.apache.org/activemq/browse/SM-749. I am not sure if >>>> this >>>> >> is a bug with smx, xfire, or a combination of both. Hopefully this >>>> can >>>> >> get resolved. I also agree with you that more examples on using the >>>> >> jsr181 component would be very helpful if included in future smx >>>> distros, >>>> >> when all of the kinks have been ironed out. >>>> >> >>>> >> For now, I'll probably have to revert back to a more ad hoc approach >>>> in >>>> >> unmarshaling data rather on relying the JSR181 component to >>>> magically do >>>> >> it for me. >>>> >> >>>> >> -los >>>> >> >>>> >> >>>> >> >>>> >> Anders Hammar wrote: >>>> >>> >>>> >>> Yep, your wsdl is missing the schema for Document. Yesterday, after >>>> >>> writing the reply to you, I found out that I had the same problem. >>>> I >>>> >>> solved it by removing the jaxb2 annotations from my domain pojo. By >>>> >>> doing that the wsdl includes the schema for the domain object. >>>> Don't >>>> >>> understand why it doesn't work as I had it in the first place as >>>> the >>>> >>> namespace specified is the same as my service. Possibly this is >>>> related >>>> >>> to the filed jira about schemas not being included. >>>> >>> >>>> >>> So, remove the jaxb2 annotations and see if that solves it. I don't >>>> >>> really remember if I also removed the typeMapping property in >>>> xbean.xml >>>> >>> file. You can try that as well if needed. >>>> >>> >>>> >>> I'm sorry to say that the jsr181 component feels shaky. The lack of >>>> >>> examples is also a big problem. I'm basically guessing and trying >>>> all >>>> >>> sorts of things as I'm also quite new to xml web services. The >>>> >>> wsdl_first example exists, but we're going the other way around and >>>> an >>>> >>> example with two jsr181 services communicating to each other would >>>> be >>>> >>> excellent! >>>> >>> >>>> >>> By the way, I've switched to the not yet released (but packaged) >>>> 3.0.1 >>>> >>> version of smx if that could do any difference. >>>> >>> >>>> >>> /Anders >>>> >>> >>>> >>> >>>> >>> moraleslos wrote: >>>> >>>> >>>> >>>> Hi Anders, >>>> >>>> >>>> >>>> Thanks for the reply... I retrofitted your example code into mine. >>>> I >>>> >>>> finally got past the compilation step so that worked great. Now >>>> when I >>>> >>>> deploy my jbi, I get this exception: >>>> >>>> >>>> >>>> #################### >>>> >>>> 11:36:49,293 | INFO | Thread-15 | DefaultFaultHandler | >>>> >>>> re.handler.DefaultFaultHandler 39 | Fault occurred! >>>> >>>> org.codehaus.xfire.fault.XFireFault: Invalid operation: document >>>> >>>> at >>>> >>>> >>>> org.codehaus.xfire.service.binding.WrappedBinding.readMessage(WrappedBinding.java:41) >>>> >>>> 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.apache.servicemix.jsr181.Jsr181ExchangeProcessor.doProcess(Jsr181ExchangeProcessor.java:113) >>>> >>>> at >>>> >>>> >>>> org.apache.servicemix.jsr181.Jsr181ExchangeProcessor.process(Jsr181ExchangeProcessor.java:68) >>>> >>>> at >>>> >>>> >>>> org.apache.servicemix.common.AsyncBaseLifeCycle.processExchange(AsyncBaseLifeCycle.java:410) >>>> >>>> at >>>> >>>> >>>> org.apache.servicemix.common.BaseLifeCycle.onMessageExchange(BaseLifeCycle.java:43) >>>> >>>> at >>>> >>>> >>>> org.apache.servicemix.jbi.messaging.DeliveryChannelImpl.processInBound(DeliveryChannelImpl.java:624) >>>> >>>> at >>>> >>>> >>>> org.apache.servicemix.jbi.nmr.flow.AbstractFlow.doRouting(AbstractFlow.java:170) >>>> >>>> at >>>> >>>> >>>> org.apache.servicemix.jbi.nmr.flow.seda.SedaFlow.doRouting(SedaFlow.java:177) >>>> >>>> at >>>> >>>> >>>> org.apache.servicemix.jbi.nmr.flow.seda.SedaQueue$1.run(SedaQueue.java:227) >>>> >>>> at >>>> >>>> >>>> org.apache.geronimo.connector.work.WorkerContext.run(WorkerContext.java:291) >>>> >>>> at >>>> EDU.oswego.cs.dl.util.concurrent.PooledExecutor$Worker.run(Unknown >>>> >>>> Source) >>>> >>>> at java.lang.Thread.run(Thread.java:619) >>>> >>>> ######################################## >>>> >>>> >>>> >>>> >>>> >>>> I used JConsole to probe my TestUnmarshallingService endpoint and >>>> >>>> everything looks ok. The WSDL output looks like this: >>>> >>>> >>>> >>>> ######################################## >>>> >>>> <?xml version="1.0" encoding="UTF-8"?><wsdl:definitions >>>> >>>> xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/" >>>> >>>> xmlns:soap11="http://schemas.xmlsoap.org/soap/envelope/" >>>> >>>> xmlns:soap12="http://www.w3.org/2003/05/soap-envelope" >>>> >>>> xmlns:soapenc11="http://schemas.xmlsoap.org/soap/encoding/" >>>> >>>> xmlns:soapenc12="http://www.w3.org/2003/05/soap-encoding" >>>> >>>> xmlns:tns="http://test.com/integration/servicemix" >>>> >>>> xmlns:wsdlsoap="http://schemas.xmlsoap.org/wsdl/soap/" >>>> >>>> xmlns:xsd="http://www.w3.org/2001/XMLSchema" >>>> >>>> targetNamespace="http://test.com/integration/servicemix"> >>>> >>>> <wsdl:types> >>>> >>>> <xsd:schema attributeFormDefault="qualified" >>>> >>>> elementFormDefault="qualified" >>>> >>>> targetNamespace="http://test.com/integration/servicemix" >>>> >>>> xmlns:xsd="http://www.w3.org/2001/XMLSchema"> >>>> >>>> <xsd:element name="retrieveData"> >>>> >>>> <xsd:complexType> >>>> >>>> <xsd:sequence> >>>> >>>> <xsd:element maxOccurs="1" minOccurs="1" ref="tns:Document"/> >>>> >>>> </xsd:sequence> >>>> >>>> </xsd:complexType> >>>> >>>> </xsd:element> >>>> >>>> <xsd:element name="retrieveDataResponse"> >>>> >>>> <xsd:complexType/> >>>> >>>> </xsd:element> >>>> >>>> </xsd:schema> >>>> >>>> </wsdl:types> >>>> >>>> <wsdl:message name="retrieveDataRequest"> >>>> >>>> <wsdl:part element="tns:retrieveData" name="parameters"/> >>>> >>>> </wsdl:message> >>>> >>>> <wsdl:message name="retrieveDataResponse"> >>>> >>>> <wsdl:part element="tns:retrieveDataResponse" >>>> name="parameters"/> >>>> >>>> </wsdl:message> >>>> >>>> <wsdl:portType name="thomsonUnmarshallerPortType"> >>>> >>>> <wsdl:operation name="retrieveData"> >>>> >>>> <wsdl:input message="tns:retrieveDataRequest" >>>> >>>> name="retrieveDataRequest"/> >>>> >>>> <wsdl:output message="tns:retrieveDataResponse" >>>> >>>> name="retrieveDataResponse"/> >>>> >>>> </wsdl:operation> >>>> >>>> </wsdl:portType> >>>> >>>> </wsdl:definitions> >>>> >>>> ###################################### >>>> >>>> >>>> >>>> Notice that there is a referenced namespace for Document, but its >>>> not >>>> >>>> defined anywhere in the WSDL. Not sure if this is ok or if >>>> something >>>> >>>> is wrong with the WSDL generation (I'm not at all proficient with >>>> >>>> WSDL/Web Services). My Document pojo looks like this: >>>> >>>> >>>> >>>> ###################################### >>>> >>>> >>>> >>>> >>>> @XmlRootElement(namespace="http://test.com/integration/servicemix") >>>> >>>> public class Document { >>>> >>>> // accessors to other XML subelements >>>> >>>> } >>>> >>>> >>>> >>>> ###################################### >>>> >>>> >>>> >>>> Again, I packaged my domain objects in the same place where my >>>> services >>>> >>>> are located. Any additional help would be appreciated. Thanks in >>>> >>>> advance! >>>> >>>> >>>> >>>> -los >>>> >>>> >>>> >>>> >>>> >>> >>>> >>> >>>> >> >>>> >> >>>> > >>>> > >>>> >>>> -- >>>> View this message in context: >>>> http://www.nabble.com/connecting-to-jsr-181-jaxb2-tf2523299s12049.html#a7475062 >>>> Sent from the ServiceMix - User mailing list archive at Nabble.com. >>>> >>>> >>> >>> >>> -- >>> Cheers, >>> Guillaume Nodet >>> >>> >> >> > > -- View this message in context: http://www.nabble.com/connecting-to-jsr-181-jaxb2-tf2523299s12049.html#a7579825 Sent from the ServiceMix - User mailing list archive at Nabble.com.
