Bengt,

How do you create the CXF endpoint? The behaviour you describe is exactly
what I would expect when you generate the SEI from a WSDL document and then
use the SEI to create a CXF endpoint. The SEI will contain JAX-B annotated
types and CXF will reconstruct the WSDL at runtime based on the JAX-WS and
JAX-B annotations on your interface and classes, instead of using the WSDL
you used at compile-time.

Kind regards,
Geert Schuring.

2011/10/3 Bengt Rodehav <[email protected]>

> I've done some more testing. It seems like restrictions on strings that use
> enumerations are preserved but that's really the only kind of "strict"
> typing that seems to be preserved when querying the WSDL in runtime. Also,
> the documentation is lost.
>
> Using this type definition
>
>  <simpleType name="PositionType">
>    <annotation>
>      <documentation>
>        L = Long (Innehavd/inlånad)
>        S = Short (Utfärdad/utlånad)
>      </documentation>
>    </annotation>
>    <restriction base="string">
>      <enumeration value="L" />
>      <enumeration value="S" />
>    </restriction>
>  </simpleType>
>
> The enumeration is preserved but the documentation is lost. The below will
> simply be transformed to a "xs:string" in the runtime wsdl - no length
> information is preserved:
>
>  <simpleType name="SecurityId">
>    <restriction base="string">
>      <minLength value="0"></minLength>
>      <maxLength value="12"></maxLength>
>    </restriction>
>  </simpleType>
>
> The below will be transformed to a "xs:decimal" without information about
> no
> of digits and decimals:
>
>  <simpleType name="SecurityCount">
>    <restriction base="decimal">
>      <totalDigits value="19" />
>      <fractionDigits value="6" />
>    </restriction>
>  </simpleType>
>
>
> The following will be transformed into a "xs:int" without information about
> maximum no of digits:
>
>  <simpleType name="AccountId">
>    <restriction base="nonNegativeInteger">
>      <maxInclusive value="99999999" />
>    </restriction>
>  </simpleType>
>
> I think this is serious. Ideally CXF should return the wsdl I started out
> with but containing the correct runtime bindings regarding e g address and
> port. It seems to me that CXF extracts the information that it needs for
> itself and excludes the rest. But the wsdl query's purpose is not for the
> CXF server but for the clients. Clients could be implemented using any
> technique which is why all available metadata should be provided. Also,
> wsdl
> is a perfect place for documentation but it's all removed. I don't really
> understand why CXF doesn't answer with the original wsdl when "wsdl first"
> is used.
>
> /Bengt
>
> 2011/10/3 Bengt Rodehav <[email protected]>
>
> > I don't promise anything since we're pretty much under pressure here (as
> > always I guess). But I'll try,
> >
> > /Bengt
> >
> >
> > 2011/10/3 Daniel Kulp <[email protected]>
> >
> >>
> >> Any chance you could file a test case?   We do have some tests to make
> >> sure
> >> the annotations and stuff are preserved.  However, they may be for
> >> external
> >> xsd's, not schemas embedded in the wsdl.   I'd have to dig in more to
> >> check
> >> that, but a test case would be great.
> >>
> >> Dan
> >>
> >>
> >> On Saturday, October 01, 2011 10:08:42 AM Bengt Rodehav wrote:
> >> > Hello,
> >> >
> >> > We're using CXF 2.4.2 to provide a web service API to a legacy
> >> application.
> >> > We are in the process of increasing the quality of the API in a number
> >> of
> >> > ways.
> >> >
> >> > First, we are typing the interface more strictly. E g instead of
> >> specifying
> >> > that a value is a string, we say that it's exactly one character long
> >> and
> >> > also enumerate it's valid values. We also try to add documentation to
> >> the
> >> > WSDL. The following is a typical case:
> >> >
> >> > <xs:simpleType name="MyType">
> >> > <xs:annotation>
> >> >  <xs:documentation>
> >> > A = ...
> >> > B = ...
> >> >  C = ...
> >> > </xs:documentation>
> >> > </xs:annotation>
> >> >  <xs:restriction base="xs:string">
> >> > <xs:pattern value="A|B|C" />
> >> >  </xs:restriction>
> >> > </xs:simpleType>
> >> >
> >> > However, even if we feed the above WSDL to CXF (we use WSDL first), in
> >> > runtime when asking for the WSDL (using ...?wsdl), the above
> information
> >> is
> >> > gone. The type is simply a string and the documentation is gone.
> >> >
> >> > Why is this? Is it a bug? What is best practice regarding strict
> >> interfaces
> >> > and documentation using CXF?
> >> >
> >> > /Bengt
> >> --
> >> Daniel Kulp
> >> [email protected]
> >> http://dankulp.com/blog
> >> Talend - http://www.talend.com
> >>
> >
> >
>

Reply via email to