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-tp17983289p18065759.html
Sent from the cxf-user mailing list archive at Nabble.com.