Ok, that seems to solve the problem, I wrote an interceptor which kicks the xmlns="" out of the payload, and then, WOW it works. yay! I still dunno why it's in there anyway, the client logs the xml messages and doesnt seem to have it in there..or it lies..when I dump the incomming message into a logfile I see it..or saw it..writing that interceptor was easier than expected..
But thanks for your help Dan, now I'm finally done..2 weeks late :D MathisMohr wrote: > > > I got a little deeper into this xmlns="" thing. If I send a plain xml > message to my system (with another, rather "custom" client) that contains > the xmlns="" part, the message is refused, or rather not unmarshalled (the > phenomena I witness when I try to get the "real" client working. > But once I remove that part, it works. Instead of the obnoxious > ElementNSImpl instances I get my content wrapped up in JAXBElements, ready > for further processing. > > Now, since I do not have any influence on the "real" client, and this > workaround only works on my "custom" one..would it be possible to > eliminate that part before the Message gets processed? Kinda like an > interceptor, that reads the soapmessage, looks for the appropriate element > and rewrites it? > > > > MathisMohr wrote: >> >> >> So, as far as I understand it, if I "include" my xsd-files (without any >> targetNamespace information) into my wsdl-schema (which has a >> targetNamespace information) these attributes should be inherited by the >> xsds..or not? >> >> I peeked a little deeper into what is actually sent by the other side to >> my webservice, and stumbled upon this: >> >> (...) >> <soap:Body> >> <GetVehicleOwnerHolderByChassisAndDate >> xmlns="http://services.eucaris.net/"> >> <VehOwnerHolderByChassisAndDate> >> <VehOwnerHolderByChassisAndDate >> xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" >> xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns=""> >> (...) >> >> As far as I understand it, that part should determine to what schema the >> following elements without prefix belong..but the client is leaving it >> blank, or even setting it to a blank value. Could this be the reason why >> JaxB doesnt recognize it on my side? Just a thought. >> >> Another thing I tried was to willingly alter the wsdl to not accept >> "xsd:any" any more but to force it to accept the >> "VehOwnerHolderByChassisAndDateType" from my xsds instead. This doesnt >> work at all, all content is being rejected. Funny thing though, if I do >> it that way I have a clear connection between all types, but whatever >> junk the client sends doesnt seem to fit in.. >> >> >> >> dkulp wrote: >>> >>> >>> I have a feeling that lack of the target namespace is going to be an >>> issue. The elements need to be namespace qualified for JAXB to look >>> it up in it's internal maps. >>> >>> >>> I just dug around a bit and discovered: >>> >>> http://www.xfront.com/ZeroOneOrManyNamespaces.html#mixed >>> >>> Thus, it looks like you should use an "include", not an "import" for >>> this. However, that will bring those types in the same namespace. >>> If the server isn't namespace qualifying that element on the wire, >>> JAXB still won't be able to do anything with it. >>> >>> >>> Dan >>> >>> >>> >>> On Jun 20, 2008, at 5:08 AM, MathisMohr wrote: >>> >>>> >>>> Another day and another try, well.. >>>> >>>> 1.: I'm rather new to xml/xsd/wsdl/webservice/cxf and all the files >>>> were >>>> provided by our partner, who developed the other side of the >>>> webservice, so >>>> I hoped it would work out of the box (I cant ask him, he's working >>>> with >>>> .Net). The xsd-files do not define a targetNamespace at all, nor do >>>> they >>>> contain a namespace except the XML-Schema one, this looks >>>> suspicious..could >>>> it be that this is the reason? Here's a more accurate snippet (the >>>> original, >>>> totally unmodified version I was supplied with). I already tried >>>> adding the >>>> targetNamespace into the XSDs, but I had no luck. Can you give me a >>>> hint on >>>> this? >>>> >>>> WSDL: >>>> <?xml version="1.0" encoding="utf-8"?> >>>> <definitions xmlns:http="http://schemas.xmlsoap.org/wsdl/http/" >>>> xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/" >>>> xmlns:s="http://www.w3.org/2001/XMLSchema" >>>> xmlns:s0="http://services.eucaris.net/" >>>> xmlns:soapenc="http://schemas.xmlsoap.org/soap/encoding/" >>>> xmlns:tm="http://microsoft.com/wsdl/mime/textMatching/" >>>> xmlns:mime="http://schemas.xmlsoap.org/wsdl/mime/" >>>> targetNamespace="http://services.eucaris.net/" >>>> xmlns="http://schemas.xmlsoap.org/wsdl/"> >>>> <types> >>>> <s:schema elementFormDefault="qualified" >>>> targetNamespace="http://services.eucaris.net/"> >>>> <!-- This is were I had my imports --> >>>> <s:element name="GetVehicleOwnerHolderByChassisAndDate"> >>>> <s:complexType> >>>> <s:sequence> >>>> <s:element minOccurs="0" maxOccurs="1" >>>> name="VehOwnerHolderByChassisAndDate"> >>>> <s:complexType mixed="true"> >>>> <s:sequence> >>>> <s:any /> >>>> </s:sequence> >>>> </s:complexType> >>>> </s:element> >>>> </s:sequence> >>>> </s:complexType> >>>> </s:element> >>>> (..more elements) >>>> >>>> XSD: >>>> <?xml version="1.0" encoding="UTF-8"?> >>>> <!-- XSD version v1.0.2 --> >>>> >>>> <xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" >>>> elementFormDefault="qualified"> >>>> <xs:include schemaLocation="EucarisIIHeader.xsd"/> >>>> >>>> <xs:element name="VehOwnerHolderByChassisAndDate" >>>> type="VehOwnerHolderByChassisAndDateType"/> >>>> >>>> <xs:complexType name="VehOwnerHolderByChassisAndDateType"> >>>> <xs:sequence> >>>> <xs:element name="Header" type="HeaderType"/> >>>> <xs:element name="Body"> >>>> <xs:complexType> >>>> <xs:sequence> >>>> <xs:element name="Request"> >>>> <xs:complexType> >>>> <xs:sequence> >>>> <xs:element >>>> name="VehCountryReq" type="xs:string" >>>> nillable="false"/> >>>> <xs:element >>>> name="VehIdentificationNumberReq" >>>> type="xs:string"/> >>>> <xs:element >>>> name="ReferenceDateTimeReq" type="xs:dateTime" >>>> minOccurs="0"/> >>>> </xs:sequence> >>>> </xs:complexType> >>>> </xs:element> >>>> </xs:sequence> >>>> </xs:complexType> >>>> </xs:element> >>>> </xs:sequence> >>>> </xs:complexType> >>>> </xs:schema> >>>> >>>> >>>> 2.: Here, I followed the idea of generating each schema in a different >>>> package (horrible until now, because now I have 5-6 implementations of >>>> basically always the same type, but anyway for now). Adding the >>>> Objectfactories of these packages to the Serviceinterface or its >>>> Impl didnt >>>> work either. Same error, and it's probably just related to 1.). >>>> >>>> >>>> dkulp wrote: >>>>> >>>>> >>>>> On Jun 19, 2008, at 2:17 AM, MathisMohr wrote: >>>>> >>>>>> >>>>>> Ok I tried 2 things, both with no luck: >>>>>> >>>>>> 1.) I inlcuded the xsd-files into the wsdl, so that everything in >>>>>> generated >>>>>> in one move. It works, all the classes are being generated in one >>>>>> package >>>>>> (ie com.foo.generated.wsdl). Yet still, my test refuses to >>>>>> unmarshall the >>>>>> "inner" elements. >>>>> >>>>> That's actually probably bad. Are you using the -p option to map >>>>> them all to one package? Or are all the schemas specifying the same >>>>> targetNamespace? (in which case it should be an include, not import) >>>>> >>>>> The -p thing is really bad with multiple schemas. I've logged a bug >>>>> about it: >>>>> https://issues.apache.org/jira/browse/CXF-1662 >>>>> >>>>>> 2.) Without this inclusion, I added the ObjectFactory of the >>>>>> seperatly >>>>>> generated xsd-classes (ie com.foo.generated.xsd) to my PortType. But >>>>>> in this >>>>>> case, it doesnt work as well. Yet this may be my fault, is my >>>>>> placement of >>>>>> the annotation (at the implementation of the serviceinterface) >>>>>> correct? >>>>> >>>>> Maybe. Possibly on the impl instead. I'm not really sure. :-( >>>>> >>>>> If you use the 2.1.1 version that we are currently voting on, you can >>>>> also use spring config to add the classes: >>>>> >>>>> >>>>> <!-- Endpoint --> >>>>> <jaxws:endpoint id="testEndpoint" >>>>> >>>>> implementor="org.apache.cxf.systest.jaxb.service.TestServiceImpl" >>>>> address="http://localhost:7081/service/TestEndpoint"> >>>>> >>>>> <jaxws:properties> >>>>> <entry key="jaxb.additionalContextClasses"> >>>>> <bean >>>>> class="org.apache.cxf.systest.jaxb.util.ClassArrayFactoryBean"> >>>>> <property name="classNames"> >>>>> <list> >>>>> >>>>> <value>org.apache.cxf.systest.jaxb.model.ExtendedWidget</ >>>>> value> >>>>> </list> >>>>> </property> >>>>> </bean> >>>>> </entry> >>>>> </jaxws:properties> >>>>> </jaxws:endpoint> >>>>> >>>>> 2.1.1 can be downloaded from: >>>>> http://people.apache.org/~dkulp/stage_cxf/2.1.1/ >>>>> >>>>> It will hopefully be released tomorrow. >>>>> >>>>> Dan >>>>> >>>>> >>>>> >>>>> >>>>>> Another thing that came up, yet illogical, is: Could it be, that the >>>>>> Elements, which are not unmarshalled simply don't match my generated >>>>>> classes? But that really defies logic, the testclient AND the wsdl >>>>>> were >>>>>> supplied together.. >>>>>> >>>>>> >>>>>> dkulp wrote: >>>>>>> >>>>>>> >>>>>>> This is much easier with 2.1, so stick with that....... >>>>>>> >>>>>>> As you surmised, by default, the runtime only knows about the types >>>>>>> that are references in the generated code from the wsdl. One >>>>>>> solution is to add imports in the wsdl to import the other schemas >>>>>>> and >>>>>>> regenerate. >>>>>>> >>>>>>> The other option is to tell CXF about the other types that you want >>>>>>> it >>>>>>> to accept. The JAXB @XmlSeeAlso annotation is the easiest way >>>>>>> to do >>>>>>> that. If you generate objects from your other schemas with xjc, >>>>>>> it >>>>>>> probably generated a ObjectFactory class. Just add: >>>>>>> @XmlSeeAlso({com.foo.blah.ObjectFactory.class}) >>>>>>> to you code to have jaxb pick that up. >>>>>>> >>>>>>> There are ways of doing it via configuration and properties and >>>>>>> such, >>>>>>> but the XmlSeeAlso is probably the easiest, at least to get started >>>>>>> to >>>>>>> make sure it will work for you. >>>>>>> >>>>>>> Dan >>>>>>> >>>>>>> >>>>>>> >>>>>>> >>>>>>> On Jun 18, 2008, at 9:58 AM, MathisMohr wrote: >>>>>>> >>>>>>>> >>>>>>>> My Problem is: >>>>>>>> >>>>>>>> I am to create a webservice. I'm currently using CXF 2.1, but that >>>>>>>> doesnt >>>>>>>> seem to be the point, I also tried 2.0.6 and 2.0.7. with no >>>>>>>> different >>>>>>>> outcome. >>>>>>>> I have the WSDL and some XSD files defining the main request and >>>>>>>> response >>>>>>>> messages. Thing is, the WSDL only defines 2 elements, and then >>>>>>>> refers to a >>>>>>>> xsd:any element, so it would accept every data that follows. There >>>>>>>> is no >>>>>>>> clear connection to the XSDs. I can generate Java Code out of them >>>>>>>> though. >>>>>>>> Now when I use Jetty to start the webservice on my machine I see >>>>>>>> that it is >>>>>>>> working. I can send messages to the webservice, but CXF only seems >>>>>>>> to >>>>>>>> unmarshall the elements which are defined in the wsdl, everything >>>>>>>> else is >>>>>>>> being summed up in an instance of ElementNSImpl (from xerces). >>>>>>>> Thanks to >>>>>>>> debugging my webservice I found out that this Object actually has >>>>>>>> all my >>>>>>>> information in it, in some kind of DOM-Tree, it's just not being >>>>>>>> unmarshalled. As far as I see it, it seems that JaxB either doesnt >>>>>>>> recognize >>>>>>>> the generated files of the xsd's (because there is no connection >>>>>>>> between the >>>>>>>> wsdl and the xsds) or JaxB doesnt accept them. Either way, I >>>>>>>> have no >>>>>>>> solution. Can someone help me? >>>>>>>> >>>>>>>> wsdl-snippet: >>>>>>>> >>>>>>>> <s:element name="GetVehicleOwnerHolderByChassisAndDate"> >>>>>>>> <s:complexType> >>>>>>>> <s:sequence> >>>>>>>> <s:element minOccurs="0" maxOccurs="1" >>>>>>>> name="VehOwnerHolderByChassisAndDate"> >>>>>>>> <s:complexType mixed="true"> >>>>>>>> <sequence> >>>>>>>> <s:any /> >>>>>>>> </s:sequence> >>>>>>>> </s:complexType> >>>>>>>> </s:element> >>>>>>>> </s:sequence> >>>>>>>> </s:complexType> >>>>>>>> </s:element> >>>>>>>> >>>>>>>> Xsd-snippet: >>>>>>>> >>>>>>>> <xs:element name="VehOwnerHolderByChassisAndDate" >>>>>>>> type="VehOwnerHolderByChassisAndDateType"/> >>>>>>>> >>>>>>>> <xs:complexType name="VehOwnerHolderByChassisAndDateType"> >>>>>>>> <xs:sequence> >>>>>>>> <xs:element name="Header" type="HeaderType"/> >>>>>>>> <xs:element name="Body"> >>>>>>>> <xs:complexType> >>>>>>>> <xs:sequence> >>>>>>>> <xs:element name="Request"> >>>>>>>> <xs:complexType> >>>>>>>> <xs:sequence> >>>>>>>> <xs:element name="VehCountryReq" >>>>>>>> type="xs:string" nillable="false"/> >>>>>>>> <xs:element >>>>>>>> name="VehIdentificationNumberReq" type="xs:string"/> >>>>>>>> <xs:element >>>>>>>> name="ReferenceDateTimeReq" >>>>>>>> type="xs:dateTime" minOccurs="0"/> >>>>>>>> </xs:sequence> >>>>>>>> </xs:complexType> >>>>>>>> </xs:element> >>>>>>>> </xs:sequence> >>>>>>>> </xs:complexType> >>>>>>>> </xs:element> >>>>>>>> </xs:sequence> >>>>>>>> </xs:complexType> >>>>>>>> >>>>>>>> Generated-code: >>>>>>>> >>>>>>>> @XmlAccessorType(XmlAccessType.FIELD) >>>>>>>> @XmlType(name = "", propOrder = { >>>>>>>> "vehOwnerHolderByChassisAndDate" >>>>>>>> }) >>>>>>>> @XmlRootElement(name = "GetVehicleOwnerHolderByChassisAndDate") >>>>>>>> public class GetVehicleOwnerHolderByChassisAndDate { >>>>>>>> >>>>>>>> @XmlElement(name = "VehOwnerHolderByChassisAndDate") >>>>>>>> protected >>>>>>>> GetVehicleOwnerHolderByChassisAndDate >>>>>>>> .VehOwnerHolderByChassisAndDate >>>>>>>> vehOwnerHolderByChassisAndDate; >>>>>>>> >>>>>>>> >>>>>>>> public >>>>>>>> GetVehicleOwnerHolderByChassisAndDate >>>>>>>> .VehOwnerHolderByChassisAndDate >>>>>>>> getVehOwnerHolderByChassisAndDate() { >>>>>>>> return vehOwnerHolderByChassisAndDate; >>>>>>>> } >>>>>>>> >>>>>>>> >>>>>>>> public void >>>>>>>> setVehOwnerHolderByChassisAndDate >>>>>>>> (GetVehicleOwnerHolderByChassisAndDate >>>>>>>> .VehOwnerHolderByChassisAndDate >>>>>>>> value) { >>>>>>>> this.vehOwnerHolderByChassisAndDate = value; >>>>>>>> } >>>>>>>> >>>>>>>> >>>>>>>> */ >>>>>>>> @XmlAccessorType(XmlAccessType.FIELD) >>>>>>>> @XmlType(name = "", propOrder = { >>>>>>>> "content" >>>>>>>> }) >>>>>>>> public static class VehOwnerHolderByChassisAndDate { >>>>>>>> >>>>>>>> @XmlMixed >>>>>>>> @XmlAnyElement(lax = true) >>>>>>>> protected List content; >>>>>>>> >>>>>>>> >>>>>>>> public List getContent() { >>>>>>>> if (content == null) { >>>>>>>> content = new ArrayList(); >>>>>>>> } >>>>>>>> return this.content; >>>>>>>> } >>>>>>>> -- >>>>>>>> View this message in context: >>>>>>>> http://www.nabble.com/CXF%2C-trouble-to-find-Classes-to-unmarshal-to-tp17983289p17983289.html >>>>>>>> Sent from the cxf-user mailing list archive at Nabble.com. >>>>>>>> >>>>>>> >>>>>>> --- >>>>>>> Daniel Kulp >>>>>>> [EMAIL PROTECTED] >>>>>>> http://www.dankulp.com/blog >>>>>>> >>>>>>> >>>>>>> >>>>>>> >>>>>>> >>>>>>> >>>>>> >>>>>> -- >>>>>> View this message in context: >>>>>> http://www.nabble.com/CXF%2C-trouble-to-find-Classes-to-unmarshal-to-tp17983289p17998010.html >>>>>> Sent from the cxf-user mailing list archive at Nabble.com. >>>>>> >>>>> >>>>> --- >>>>> Daniel Kulp >>>>> [EMAIL PROTECTED] >>>>> http://www.dankulp.com/blog >>>>> >>>>> >>>>> >>>>> >>>>> >>>>> >>>> >>>> -- >>>> View this message in context: >>>> http://www.nabble.com/CXF%2C-trouble-to-find-Classes-to-unmarshal-to-tp17983289p18025827.html >>>> Sent from the cxf-user mailing list archive at Nabble.com. >>>> >>> >>> --- >>> Daniel Kulp >>> [EMAIL PROTECTED] >>> http://www.dankulp.com/blog >>> >>> >>> >>> >>> >>> >> >> > > -- View this message in context: http://www.nabble.com/CXF%2C-trouble-to-find-Classes-to-unmarshal-to-tp17983289p18085999.html Sent from the cxf-user mailing list archive at Nabble.com.
