Hi,

Before I get chance to dig your testcase, I'd say the inline xsd is expected behavior, more details please take a look at SMXCOMP-395[1],
but the problem is that the targetnamespce shouldn't be messed up.
[1]https://issues.apache.org/jira/browse/SMXCOMP-395

Freeman
On 2011-3-25, at 下午5:22, Jürgen Bockhorn wrote:

Hallo Freeman,

please find attached two maven projects.

cfx-wsdl-first-xsd-war.zip contains a simple webservice, to be deployed on a external servlet container.

cxf-wsdl-first-xsd.zip contains s service assembly and a service unit to configure a cxfbc:consumer - cxfbc:provider bridge.
You have to adopt the locationURI attributes to your system.

If you try to get the WSDL from the webservice directly (e.g. with soapUI) everything works fine. if you try to get it via ESB the XSDs are inlined and namespaces are mixed up.

I've also tried some other things which are not included:

1) use to different service units in one assembly. In this case it seems, that the second one will not be depoyed by the ESB. 2) use to differen service units in two different assemblies. In this case it works. The resulting WSDL ist NOT inlined.

Cause we have a bunch of services I would prefere to keep it in one assembly containing one unit, as shown in the example.

I hope the attachmets will work.

Best regards

Jürgen

-----Ursprüngliche Nachricht-----
Von: Freeman Fang [mailto:[email protected]]
Gesendet: Freitag, 25. März 2011 03:42
An: [email protected]
Betreff: Re: AW: AW: Problems to create a cxfbc:provider/consumer proxy
bridge

Hi,

Any change you can append a buildable and runnable testcase which I can deploy the reproduce this problem? You can remove your private business
logic and just a simple one to reproduce this issue.
That's would be very helpful.

Freeman
On 2011-3-24, at 下午5:17, Jürgen Bockhorn wrote:

Hi,

may I expect an answer to my problem or do I have to live with it ?

Regards,

Jürgen

-----Ursprüngliche Nachricht-----
Von: Jürgen Bockhorn
Gesendet: Montag, 21. März 2011 10:30
An: [email protected]
Betreff: AW: AW: Problems to create a cxfbc:provider/consumer proxy
bridge

Hi,

as it seems that attachments don't work I past both WSDLs.

Original WSDL:

<?xml version="1.0" encoding="UTF-8"?> <wsdl:definitions
name="wsdl-first"
    xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/";
    xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/";
    xmlns:xsd="http://www.w3.org/2001/XMLSchema";
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance";
    xmlns:tns="http://servicemix.apache.org/samples/wsdl-first";
    xmlns:typens="http://servicemix.apache.org/samples/wsdl-
first/types"
    targetNamespace="http://servicemix.apache.org/samples/wsdl-
first">

    <wsdl:types>
    <xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema";
      targetNamespace="http://servicemix.apache.org/samples/wsdl-
first/types"
      xmlns:jaxb="http://java.sun.com/xml/ns/jaxb";
      jaxb:version="2.0">
      <xsd:annotation><xsd:appinfo>
        <jaxb:schemaBindings>
          <jaxb:package name="de.heuboe.simtd.tmm.jaxb"/>
        </jaxb:schemaBindings>
      </xsd:appinfo></xsd:annotation>

      <xsd:include schemaLocation="person.xsd" />

    </xsd:schema>
</wsdl:types>

    <wsdl:message name="GetPersonRequest">
            <wsdl:part name="payload" element="typens:GetPerson"/>
    </wsdl:message>
    <wsdl:message name="GetPersonResponse">
            <wsdl:part name="payload"
element="typens:GetPersonResponse"/>
    </wsdl:message>
    <wsdl:message name="UnknownPersonFault">
            <wsdl:part name="payload"
element="typens:UnknownPersonFault"/>
    </wsdl:message>

  <wsdl:portType name="Person">
            <wsdl:operation name="GetPerson">
                    <wsdl:input message="tns:GetPersonRequest"/>
                    <wsdl:output message="tns:GetPersonResponse"/>
                    <wsdl:fault name="UnknownPerson"
message="tns:UnknownPersonFault"/>
            </wsdl:operation>
    </wsdl:portType>

  <wsdl:binding name="PersonSOAPBinding" type="tns:Person">
    <soap:binding style="document"
transport="http://schemas.xmlsoap.org/soap/http"; />
            <wsdl:operation name="GetPerson">
                    <wsdl:input>
                            <soap:body use="literal" />
                    </wsdl:input>
                    <wsdl:output>
                            <soap:body use="literal" />
                    </wsdl:output>
                    <wsdl:fault name="UnknownPerson">
                            <soap:fault use="literal"
name="UnknownPerson" />
                    </wsdl:fault>
     </wsdl:operation>
 </wsdl:binding>
    <wsdl:service name="PersonService">
    <wsdl:port binding="tns:PersonSOAPBinding" name="soap">
         <soap:address
location="http://localhost:8092/PersonService/
" />
     </wsdl:port>
 </wsdl:service>
</wsdl:definitions>

Included schema:

<?xml version="1.0" encoding="UTF-8"?> <xsd:schema
xmlns:xsd="http://www.w3.org/2001/XMLSchema";
  targetNamespace="http://servicemix.apache.org/samples/wsdl-
first/types"
  xmlns:per="http://servicemix.apache.org/samples/wsdl-first/types";
  xmlns:hb="http://ws.heuboe.de/base";
  elementFormDefault="qualified">


<!-- import basic structures -->
<xsd:import
  namespace="http://ws.heuboe.de/base";
  schemaLocation="jhbWSBase.xsd"
/>


<xsd:element name="GetPerson">
  <xsd:complexType>
    <xsd:sequence>
      <xsd:element name="personId" type="xsd:string"/>
    </xsd:sequence>
  </xsd:complexType>
</xsd:element>
<xsd:element name="GetPersonResponse">
  <xsd:complexType>
    <xsd:sequence>
        <xsd:element name="personId" type="xsd:string"/>
      <xsd:element name="ssn" type="xsd:string"/>
      <xsd:element name="name" type="xsd:string"/>
    </xsd:sequence>
  </xsd:complexType>
</xsd:element>
<xsd:element name="UnknownPersonFault">
  <xsd:complexType>
            <xsd:complexContent>
                    <xsd:extension base="hb:ExceptionInfo" />
            </xsd:complexContent>
  </xsd:complexType>
</xsd:element>
</xsd:schema>

Please see the import above !

And the Result:

<?xml version='1.0' encoding='UTF-8'?><wsdl:definitions name="wsdl-
first"
targetNamespace="http://servicemix.apache.org/samples/wsdl-first";
xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/";
xmlns:tns="http://servicemix.apache.org/samples/wsdl-first";
xmlns:typens="http://servicemix.apache.org/samples/wsdl-first/ types"
xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/";
xmlns:xsd="http://www.w3.org/2001/XMLSchema";
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance";>
<wsdl:types>
<xs:schema jaxb:version="2.0"
targetNamespace="http://servicemix.apache.org/samples/wsdl-
first/type
s
"
xmlns:jaxb="http://java.sun.com/xml/ns/jaxb";
xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/";
xmlns:tns="http://servicemix.apache.org/samples/wsdl-first";
xmlns:typens="http://servicemix.apache.org/samples/wsdl-first/ types"
xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/";
xmlns:xs="http://www.w3.org/2001/XMLSchema";
xmlns:xsd="http://www.w3.org/2001/XMLSchema";
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance";>
      <xsd:annotation>
  <xsd:appinfo>
        <jaxb:schemaBindings>
          <jaxb:package name="de.heuboe.simtd.tmm.jaxb"/>
        </jaxb:schemaBindings>
      </xsd:appinfo>
</xsd:annotation>




<!-- import basic structures -->


<xsd:element name="GetPerson">
  <xsd:complexType>
    <xsd:sequence>
      <xsd:element name="personId" type="xsd:string"/>
    </xsd:sequence>
  </xsd:complexType>
</xsd:element>
<xsd:element name="GetPersonResponse">
  <xsd:complexType>
    <xsd:sequence>
        <xsd:element name="personId" type="xsd:string"/>
      <xsd:element name="ssn" type="xsd:string"/>
      <xsd:element name="name" type="xsd:string"/>
    </xsd:sequence>
  </xsd:complexType>
</xsd:element>
<xsd:element name="UnknownPersonFault">
  <xsd:complexType>
            <xsd:complexContent>
                    <xsd:extension base="hb:ExceptionInfo"/>
            </xsd:complexContent>
  </xsd:complexType>
</xsd:element>


    <xs:simpleType name="Identifier">
            <xs:annotation>
                    <xs:documentation>
                            HB wide string id type to use in soap
web-
services
                    </xs:documentation>
            </xs:annotation>
            <xs:restriction base="xs:string"/>
    </xs:simpleType>

    <xs:complexType name="ExceptionInfo">
            <xs:annotation>
                    <xs:documentation>
                            HB wide exception type that should be
use in a WS-Exception/Fault-element
                    </xs:documentation>
            </xs:annotation>
            <xs:sequence>
                    <xs:element name="errorType" type="xs:string">
                            <xs:annotation>
                                    <xs:documentation>
                                            Should be restricted by
a derived object via
                                            the fixed keyword to a
constant value that describes the type.
                                            E.g.
fixed="DBException".
                                    </xs:documentation>
                            </xs:annotation>
                    </xs:element>
                    <xs:element name="errorCode" type="xs:string">
                            <xs:annotation>
                                    <xs:documentation>
                                            Specification of the
(type) of
error.
                                    </xs:documentation>
                            </xs:annotation>
                    </xs:element>
                    <xs:element minOccurs="0"
name="errorDescription"
type="xs:string">
                            <xs:annotation>
                                    <xs:documentation>
                                            Longer textual
description of the error
                                    </xs:documentation>
                            </xs:annotation>
                    </xs:element>
            </xs:sequence>
    </xs:complexType>
</xs:schema>
</wsdl:types>
<wsdl:message name="GetPersonResponse">
  <wsdl:part element="typens:GetPersonResponse" name="payload">
  </wsdl:part>
</wsdl:message>
<wsdl:message name="GetPersonRequest">
  <wsdl:part element="typens:GetPerson" name="payload">
  </wsdl:part>
</wsdl:message>
<wsdl:message name="UnknownPersonFault">
  <wsdl:part element="typens:UnknownPersonFault" name="payload">
  </wsdl:part>
</wsdl:message>
<wsdl:portType name="Person">
  <wsdl:operation name="GetPerson">
    <wsdl:input message="tns:GetPersonRequest">
  </wsdl:input>
    <wsdl:output message="tns:GetPersonResponse">
  </wsdl:output>
    <wsdl:fault message="tns:UnknownPersonFault"
name="UnknownPerson">
  </wsdl:fault>
  </wsdl:operation>
</wsdl:portType>
<wsdl:binding name="PersonSOAPBinding" type="tns:Person">
  <soap:binding style="document"
transport="http://schemas.xmlsoap.org/soap/http"/>
  <wsdl:operation name="GetPerson">
    <wsdl:input>
      <soap:body use="literal"/>
    </wsdl:input>
    <wsdl:output>
      <soap:body use="literal"/>
    </wsdl:output>
    <wsdl:fault name="UnknownPerson">
      <soap:fault name="UnknownPerson" use="literal"/>
    </wsdl:fault>
  </wsdl:operation>
</wsdl:binding>
<wsdl:service name="PersonService">
  <wsdl:port binding="tns:PersonSOAPBinding" name="soap">
    <soap:address location="http://localhost:9080/cfx-wsdl-first-
xsd-
war/services/PersonService"/>
  </wsdl:port>
</wsdl:service>
</wsdl:definitions>


Please notice that the comment from the schema was taken into the
result.
But the schema 'jhbWSBase.xsd' imported by person.xsd was inlined.
The namespace of this schema was omitted, so that reference to it in
:

<xsd:element name="UnknownPersonFault">
  <xsd:complexType>
            <xsd:complexContent>
                    <xsd:extension base="hb:ExceptionInfo"/>
            </xsd:complexContent>
  </xsd:complexType>

now is invalid.

Once again. This doesn't happen, if I deploy the provider and the
consumer with two diffenent service assemblies.

Regards,

Jürgen

Von: Freeman Fang [mailto:[email protected]]
Gesendet: Montag, 21. März 2011 09:38
An: [email protected]
Betreff: Re: AW: Problems to create a cxfbc:provider/consumer proxy
bridge


On 2011-3-21, at 下午4:16, Jürgen Bockhorn wrote:

Hello Freeman,

thank you for you quick answer.

I've followed your advice, unfortunately with no success.

The result is the same. The example was developed from the cxf-
wsdl-
first example, that comes with the servicemix.
Changes are, that the schema is external and that the schema
imports other schemas. We use imports excessifely to keep our data
structurs modulare.

After deploying the cxfbc:consumer and the cxfbc:provider in one
SU, the resulting WSDL ommits the includes and imports and the
schema is inline.
The problem is, that the namespaces of the imported schemas are
gone and therefor references to them are invalid.
Hi,

inline is expected behavior.
Did you use include instead?

The changed WSDL and the resulting WSDL (queried via the servicemix
consumer) are attached.
I can't see your attachment.

Freeman

Thanks in advance.

Jürgen

Von: Freeman Fang [mailto:[email protected]]
Gesendet: Montag, 21. März 2011 02:06
An: [email protected]
Betreff: Re: Problems to create a cxfbc:provider/consumer proxy
bridge

Hi,

My comment inline
On 2011-3-18, at 下午11:05, Jürgen Bockhorn wrote:

Hi,

I would like to configure a cxfbc:provider/cxfbc:consumer proxy
bridge to an external webservice.
The xbeans.xml is:

<?xml version="1.0" encoding="UTF-8"?>

<beans xmlns:cxfbc="http://servicemix.apache.org/cxfbc/1.0";
xmlns:person="http://servicemix.apache.org/samples/wsdl-first";>

<cxfbc:consumer wsdl="classpath:person.wsdl"
 targetService="person:PersonService"
 targetInterface="person:Person"
 locationURI="http://0.0.0.0:8082/PS";
 targetEndpoint="PSProxy"
/>

<cxfbc:provider wsdl="classpath:person.wsdl"

locationURI="http://localhost:9080/cfx-wsdl-first-xsd-war/
services
/P
er
sonService
"
 service="person:PersonService"
 interfaceName="person:Person"
 endpoint="PSProxy"
/>

The WSDL imports XSDs  to define the types instead of .

   <wsdl:types>
   <xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema";
     targetNamespace="http://www.w3.org/2001/XMLSchema";
this is incorrect, the targetNamespace you used here should be the
namespace for this schema, it should be
http://servicemix.apache.org/samples/wsdl-first/types
if you adapt the wsdl from our person.wsdl.
the http://www.w3.org/2001/XMLSchema is from w3c and it's used
for
the prefix like "xsd", you shouldn't use it as your customer
schema namespace
     xmlns:jaxb="http://java.sun.com/xml/ns/jaxb";
     jaxb:version="2.0">
     <xsd:annotation><xsd:appinfo>
       <jaxb:schemaBindings>
         <jaxb:package name="de.heuboe.simtd.tmm.jaxb"/>
       </jaxb:schemaBindings>
     </xsd:appinfo></xsd:annotation>
     <xsd:import
namespace="http://servicemix.apache.org/samples/wsdl-
first/types
"
       schemaLocation="person.xsd" />
This line is incorrect,
should use include but not import here,  something like
<xsd:include schemaLocation="person.xsd"/> if the external schema just use same namespace as the schame here you should be include,
I suppose they both are
http://servicemix.apache.org/samples/wsdl-first/types

Freeman
   </xsd:schema>

After deployment I can get the WSDL under
"http://localhost:8082/PS?wsdl . But a closer look reveals, that
the imports are replaced by the schema they contain with the
problem, that the namespaces are not longer correct.

<wsdl:types>
<xs:schema jaxb:version="2.0"
targetNamespace="http://www.w3.org/2001/XMLSchema
" xmlns:jaxb="http://java.sun.com/xml/ns/jaxb";
xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/
" xmlns:tns="http://servicemix.apache.org/samples/wsdl-first";
xmlns:typens="http://servicemix.apache.org/samples/wsdl-
first/types"
xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/";
xmlns:xs="http://www.w3.org/2001/XMLSchema
" xmlns:xsd="http://www.w3.org/2001/XMLSchema";
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance
">
 <xsd:annotation>
 <xsd:appinfo>
       <jaxb:schemaBindings>
         <jaxb:package name="de.heuboe.simtd.tmm.jaxb"/>
       </jaxb:schemaBindings>
     </xsd:appinfo>
</xsd:annotation>
<xsd:element name="GetPerson">
 <xsd:complexType>
   <xsd:sequence>
     <xsd:element name="personId" type="xsd:string"/>
   </xsd:sequence>
 </xsd:complexType>
</xsd:element>
<xsd:element name="GetPersonResponse">
 <xsd:complexType>
   <xsd:sequence>
       <xsd:element name="personId" type="xsd:string"/>
     <xsd:element name="ssn" type="xsd:string"/>
     <xsd:element name="name" type="xsd:string"/>
   </xsd:sequence>
 </xsd:complexType>
</xsd:element>
<xsd:element name="UnknownPersonFault">
 <xsd:complexType>
            <xsd:complexContent>
                    <xsd:extension base="hb:ExceptionInfo"/>
            </xsd:complexContent>
 </xsd:complexType>
</xsd:element>


     <xs:simpleType name="Identifier">
            <xs:annotation>
                    <xs:documentation>
                            HB wide string id type to use in
soap web-services
                    </xs:documentation>
            </xs:annotation>
            <xs:restriction base="xs:string"/>
     </xs:simpleType>

     <xs:complexType name="ExceptionInfo">
            <xs:annotation>
                    <xs:documentation>
                            HB wide exception type that should
be use in a WS-Exception/Fault-element
                    </xs:documentation>
            </xs:annotation>
            <xs:sequence>
                    <xs:element name="errorType"
type="xs:string">
                            <xs:annotation>
                                   <xs:documentation>
                                           Should be restricted
by a derived object via
                                           the fixed keyword to
a constant value that describes the type.
                                           E.g.
fixed="DBException".
                                   </xs:documentation>
                            </xs:annotation>
                    </xs:element>
                    <xs:element name="errorCode"
type="xs:string">
                            <xs:annotation>
                                   <xs:documentation>
                                           Specification of the
(type) of error.
                                   </xs:documentation>
                            </xs:annotation>
                    </xs:element>
                    <xs:element minOccurs="0"
name="errorDescription" type="xs:string">
                            <xs:annotation>
                                   <xs:documentation>
                                           Longer textual
description of the error
                                   </xs:documentation>
                            </xs:annotation>
                    </xs:element>
            </xs:sequence>
     </xs:complexType>
</xs:schema>
</wsdl:types>

Is this a bug or do I need to set a certain property ?

BTW:
If you deploy the consumer and the provider in to seperate
service assemblies the expected WSDL is returned.
If you just use to service units it seems, only the first will be
depoyed.
If you use more than one <xs:schema> element with the <xs:types>
element it won't work in any constalation, but if you call the
service directly everything is fine.



xbeans.xml, wsdl etc. are attached to this mail.

-----
Thanx in advance
Jürgen

<xbean.xml><person.xsd><jhbWSBase.xsd>


--
Freeman Fang

------------------------

FuseSource: http://fusesource.com
blog: http://freemanfang.blogspot.com
twitter: http://twitter.com/freemanfang Apache
Servicemix:http://servicemix.apache.org
Apache Cxf: http://cxf.apache.org
Apache Karaf: http://karaf.apache.org Apache Felix:
http://felix.apache.org



--
Freeman Fang

------------------------

FuseSource: http://fusesource.com
blog: http://freemanfang.blogspot.com
twitter: http://twitter.com/freemanfang Apache
Servicemix:http://servicemix.apache.org
Apache Cxf: http://cxf.apache.org
Apache Karaf: http://karaf.apache.org Apache Felix:
http://felix.apache.org



--
Freeman Fang

------------------------

FuseSource: http://fusesource.com
blog: http://freemanfang.blogspot.com
twitter: http://twitter.com/freemanfang
Apache Servicemix:http://servicemix.apache.org
Apache Cxf: http://cxf.apache.org
Apache Karaf: http://karaf.apache.org
Apache Felix: http://felix.apache.org

<cfx-wsdl-first-xsd-war.zip><cxf-wsdl-first-xsd.zip>


--
Freeman Fang

------------------------

FuseSource: http://fusesource.com
blog: http://freemanfang.blogspot.com
twitter: http://twitter.com/freemanfang
Apache Servicemix:http://servicemix.apache.org
Apache Cxf: http://cxf.apache.org
Apache Karaf: http://karaf.apache.org
Apache Felix: http://felix.apache.org

Reply via email to