Who called Endpoint.publish()? In case you haven't figured it out, I'm over my head at this point?
On Thu, Feb 19, 2009 at 8:50 AM, Andrew Clegg <[email protected]> wrote: > Okay... But I'm trying to do this from *inside* a Provider endpoint which > had already been published. Would I need to get cxf to inject the endpoint > in or something? > > Andrew. > > > On 19 Feb 2009, at 13:41, Benson Margulies <[email protected]> wrote: > >> No example that I know of, but here's the path to the candy house in >> the woods. Beware of witches with ovens. >> >> Endpoint.publish returns Endpoint. Endpoint can be cast to >> EndpointImpl. EndpointImpl returns Service. Service returns list of >> ServiceInfo. I don't understand exactly why it's a list, I keep >> meaning to ask Dan. I believe it will always return a singleton list, >> but if not find your particular service on the list, and then you have >> the item to pass to the function you found, which is extremely >> unlikely to melt. >> >> On Thu, Feb 19, 2009 at 8:30 AM, Andrew Clegg <[email protected]> >> wrote: >>> >>> Yeah, as long as you wouldn't say the API is likely to change in >>> future releases, I'm happy hooking into that. (And even if it does, I >>> can fall back to reading the WSDL myself). Is there an example that >>> demonstrates the necessary breadcrumbs? >>> >>> Cheers, >>> >>> Andrew. >>> >>> 2009/2/19 Benson Margulies <[email protected]>: >>>> >>>> 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/ :: >>>>> >>>> >>> >>> >>> >>> -- >>> :: http://biotext.org.uk/ :: >>> >
