Hello Geert. Thanks for your answer. We use wsdl2java to generate an interface (the SEI) that we then implement. Sounds like the way you describe it. Is there an alternate way to do this that will preserve the wsdl? Or is there an easy way to just intercept the wsdl query and make sure that the original wsdl and xsd's are returned?
/Bengt 2011/10/26 Geert Schuring <[email protected]> > 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 > > >> > > > > > > > > >
