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/ :: >
