cxf-issues mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From "Colm O hEigeartaigh (JIRA)" <j...@apache.org>
Subject [jira] [Resolved] (CXF-6110) AbstractSTSClient MEX: download XML schema from Location
Date Mon, 24 Nov 2014 12:10:12 GMT

     [ https://issues.apache.org/jira/browse/CXF-6110?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
]

Colm O hEigeartaigh resolved CXF-6110.
--------------------------------------
    Resolution: Fixed

> AbstractSTSClient MEX: download XML schema from Location
> --------------------------------------------------------
>
>                 Key: CXF-6110
>                 URL: https://issues.apache.org/jira/browse/CXF-6110
>             Project: CXF
>          Issue Type: Improvement
>          Components: STS
>    Affects Versions: 2.7.13
>            Reporter: Frank Cornelis
>            Assignee: Colm O hEigeartaigh
>             Fix For: 3.1.0, 3.0.3, 2.7.14
>
>
> For MEX data like:
> {code:xml}
>   <MetadataSection
>     Dialect="http://www.w3.org/2001/XMLSchema"
>     Identifier="http://something">
>         <Location>https://some/location.xsd</Location>
>   </MetadataSection>
> {code}
> the AbstractSTSClient should probably start downloading when getAny() gives NULL.
> I stumbled upon this by implementing a WS-Trust STS with a WSDL that contains schema
imports instead of an embedded XML schema.
> The next patch adds this feature (quick and dirty).
> {code}
> --- src/main/java/org/apache/cxf/ws/security/trust/AbstractSTSClient.java.orig	2014-11-19
17:49:37.964705313 +0100
> +++ src/main/java/org/apache/cxf/ws/security/trust/AbstractSTSClient.java	2014-11-19
18:19:01.989607217 +0100
> @@ -41,6 +41,9 @@
>  import javax.wsdl.extensions.ExtensibilityElement;
>  import javax.wsdl.extensions.schema.Schema;
>  import javax.xml.namespace.QName;
> +import javax.xml.parsers.DocumentBuilder;
> +import javax.xml.parsers.DocumentBuilderFactory;
> +import javax.xml.parsers.ParserConfigurationException;
>  import javax.xml.stream.XMLStreamException;
>  import javax.xml.stream.XMLStreamWriter;
>  import javax.xml.transform.dom.DOMSource;
> @@ -48,6 +51,7 @@
>  import org.w3c.dom.Document;
>  import org.w3c.dom.Element;
>  import org.w3c.dom.Node;
> +import org.xml.sax.SAXException;
>  import org.apache.cxf.Bus;
>  import org.apache.cxf.BusException;
>  import org.apache.cxf.binding.soap.SoapBindingConstants;
> @@ -525,6 +529,11 @@
>                              bus.getExtension(WSDLManager.class).getDefinition((Element)s.getAny());
>                      } else if ("http://www.w3.org/2001/XMLSchema".equals(s.getDialect()))
{
>                          Element schemaElement = (Element)s.getAny();
> +                        if (schemaElement ==  null) {
> +                            String schemaLocation = s.getLocation();
> +                            LOG.info("XSD schema location: " + schemaLocation);
> +                            schemaElement = downloadSchema(schemaLocation);
> +                        }
>                          QName schemaName = 
>                              new QName(schemaElement.getNamespaceURI(), schemaElement.getLocalName());
>                          WSDLManager wsdlManager = bus.getExtension(WSDLManager.class);
> @@ -586,10 +595,20 @@
>                      client = new ClientImpl(bus, endpoint);
>                  }
>              } catch (Exception ex) {
> -                throw new TrustException(LOG, "WS_MEX_ERROR", ex);
> +                throw new TrustException("WS_MEX_ERROR", LOG, ex);
>              }
>          }
>      }
> +
> +    private Element downloadSchema(String schemaLocation)
> +        throws ParserConfigurationException, SAXException, IOException {
> +        DocumentBuilderFactory documentBuilderFactory = DocumentBuilderFactory.newInstance();
> +        documentBuilderFactory.setNamespaceAware(true);
> +        DocumentBuilder documentBuilder = documentBuilderFactory.newDocumentBuilder();
> +        Document document = documentBuilder.parse(schemaLocation);
> +        return document.getDocumentElement();
> +    }
> +
>      protected String findMEXLocation(EndpointReferenceType ref, boolean useEPRWSAAddrAsMEXLocation)
{
>          if (ref.getMetadata() != null && ref.getMetadata().getAny() != null)
{
>              for (Object any : ref.getMetadata().getAny()) {
> {code}



--
This message was sent by Atlassian JIRA
(v6.3.4#6332)

Mime
View raw message