Superfically, looks like you could call that API, yes. It's used
internally to set up validation. Of course, you'd need to follow a
trail of breadcrumbs to the CXF-specific Service object to get there.
Is that the issue?

On Thu, Feb 19, 2009 at 7:55 AM, Andrew Clegg <[email protected]> wrote:
> So the EndpointReferenceUtils.getSchema( serviceInfo ) approach is
> only for @WebService classes and not @WebServiceProvider classes?
>
> Andrew.
>
> 2009/2/19 Benson Margulies <[email protected]>:
>> CXF does not precisely have a 'copy' of the WSDL. It has a wsdl4j
>> representation.
>>
>> On the 2.2 branch, there is an XmlSchemaCollection of the schemas. In
>> earlier branches, it has a DOM copy of them.
>>
>> We could, I suppose, expose. I'm hoping that Dan will wade in at this point.
>>
>>
>> On Thu, Feb 19, 2009 at 5:42 AM, Andrew Clegg <[email protected]> 
>> wrote:
>>> Followup...
>>>
>>> So I've got this working by reading the WSDL myself in the provider
>>> class's constructor:
>>>
>>>
>>> // First read WSDL
>>> ClassLoader loader = this.getClass().getClassLoader();
>>> InputStream wsdlFile = loader.getResourceAsStream( WSDL_NAME );
>>> Document wsdl = org.apache.cxf.helpers.DOMUtils.readXml( wsdlFile );
>>>
>>> // Then get schema body from WSDL -- TODO tighten up query using namespaces
>>> String schemaQuery =
>>> "//*[local-name()='definitions']/*[local-name()='types']/*[local-name()='schema']";
>>> XPathExpression schemaPath = xp.compile( schemaQuery );
>>> Node schemaNode = ( Node ) schemaPath.evaluate( wsdl, XPathConstants.NODE );
>>>
>>> // Then compile it and store it
>>> String language = XMLConstants.W3C_XML_SCHEMA_NS_URI;
>>> SchemaFactory sf = SchemaFactory.newInstance( language );
>>> DOMSource ds = new DOMSource( schemaNode );
>>> this.schema = sf.newSchema( ds );
>>>
>>>
>>> This lets me easily validate messages in the invoke() method, for example:
>>>
>>>
>>> schema.newValidator().validate( domRequest );
>>>
>>>
>>> where domRequest is the DOMSource of the message payload.
>>>
>>> However it still seems a little inelegant to read the WSDL myself when
>>> CXF must have a copy.
>>>
>>> I've found the getSchema() method of the EndpointReferenceUtils class
>>> via an old thread on here, but that requires a ServiceInfo object --
>>> is there any way to acquire one of these for a Provider service?
>>>
>>> Thanks,
>>>
>>> Andrew.
>>>
>>> 2009/2/16 Andrew Clegg <[email protected]>:
>>>> Hi folks,
>>>>
>>>> From inside a Provider implementation, how can I obtain the schema of
>>>> the service's request/response messages, short of reading the WSDL
>>>> myself and extracting the schema from it?
>>>>
>>>> Thanks,
>>>>
>>>> Andrew.
>>>>
>>>> --
>>>> :: http://biotext.org.uk/ ::
>>>>
>>>
>>>
>>>
>>> --
>>> :: http://biotext.org.uk/ ::
>>>
>>
>
>
>
> --
> :: http://biotext.org.uk/ ::
>

Reply via email to