Kevin Minder created KNOX-664:
---------------------------------

             Summary: Invalid service definitions have poor diagnostics and 
should fail more aggressivly
                 Key: KNOX-664
                 URL: https://issues.apache.org/jira/browse/KNOX-664
             Project: Apache Knox
          Issue Type: Bug
          Components: Server
    Affects Versions: 0.6.0
            Reporter: Kevin Minder
             Fix For: Future


I encountered a situation where a service definition rewrite.xml file was 
malformed.  Note the use of rule instead of the correct rules for the root tag.
{code}
<rule>
  <rule dir="IN" name="ELASTICSEARCH/elasticsearch/inbound" 
pattern="*://*:*/**/elasticsearch/{path=**}?{**}">
    <rewrite template="{$serviceUrl[ELASTICSEARCH]}/{path=**}?{**}"/>
  </rule>
</rules>
{code}
During startup/deployment a failure is noted in the logs.
{code}
2016-02-01 22:53:57,658 ERROR digester3.Digester (Digester.java:parse(1652)) - 
An error occurred while parsing XML from '(already loaded from stream)', see 
nested exceptions
org.xml.sax.SAXParseException; lineNumber: 3; columnNumber: 70; Error at line 3 
char 70: null
        at 
org.apache.commons.digester3.Digester.createSAXException(Digester.java:3118)
        at 
org.apache.commons.digester3.Digester.createSAXException(Digester.java:3146)
        at 
org.apache.commons.digester3.Digester.startElement(Digester.java:1355)
        at 
com.sun.org.apache.xerces.internal.parsers.AbstractSAXParser.startElement(AbstractSAXParser.java:509)
        at 
com.sun.org.apache.xerces.internal.parsers.AbstractXMLDocumentParser.emptyElement(AbstractXMLDocumentParser.java:182)
        at 
com.sun.org.apache.xerces.internal.impl.XMLDocumentFragmentScannerImpl.scanStartElement(XMLDocumentFragmentScannerImpl.java:1344)
        at 
com.sun.org.apache.xerces.internal.impl.XMLDocumentFragmentScannerImpl$FragmentContentDriver.next(XMLDocumentFragmentScannerImpl.java:2787)
        at 
com.sun.org.apache.xerces.internal.impl.XMLDocumentScannerImpl.next(XMLDocumentScannerImpl.java:606)
        at 
com.sun.org.apache.xerces.internal.impl.XMLDocumentFragmentScannerImpl.scanDocument(XMLDocumentFragmentScannerImpl.java:510)
        at 
com.sun.org.apache.xerces.internal.parsers.XML11Configuration.parse(XML11Configuration.java:848)
        at 
com.sun.org.apache.xerces.internal.parsers.XML11Configuration.parse(XML11Configuration.java:777)
        at 
com.sun.org.apache.xerces.internal.parsers.XMLParser.parse(XMLParser.java:141)
        at 
com.sun.org.apache.xerces.internal.parsers.AbstractSAXParser.parse(AbstractSAXParser.java:1213)
        at 
com.sun.org.apache.xerces.internal.jaxp.SAXParserImpl$JAXPSAXParser.parse(SAXParserImpl.java:642)
        at org.apache.commons.digester3.Digester.parse(Digester.java:1642)
        at org.apache.commons.digester3.Digester.parse(Digester.java:1745)
        at 
org.apache.hadoop.gateway.filter.rewrite.impl.xml.XmlUrlRewriteRulesImporter.load(XmlUrlRewriteRulesImporter.java:46)
        at 
org.apache.hadoop.gateway.filter.rewrite.api.UrlRewriteRulesDescriptorFactory.load(UrlRewriteRulesDescriptorFactory.java:54)
        at 
org.apache.hadoop.gateway.util.ServiceDefinitionsLoader.loadRewriteRules(ServiceDefinitionsLoader.java:94)
        at 
org.apache.hadoop.gateway.util.ServiceDefinitionsLoader.loadServiceDefinitions(ServiceDefinitionsLoader.java:73)
        at 
org.apache.hadoop.gateway.deploy.DeploymentFactory.createDeployment(DeploymentFactory.java:84)
        at 
org.apache.hadoop.gateway.GatewayServer$InternalTopologyListener.handleCreateDeployment(GatewayServer.java:427)
        at 
org.apache.hadoop.gateway.GatewayServer$InternalTopologyListener.handleTopologyEvent(GatewayServer.java:400)
        at 
org.apache.hadoop.gateway.services.topology.impl.DefaultTopologyService.notifyChangeListeners(DefaultTopologyService.java:323)
        at 
org.apache.hadoop.gateway.services.topology.impl.DefaultTopologyService.reloadTopologies(DefaultTopologyService.java:297)
        at org.apache.hadoop.gateway.GatewayServer.start(GatewayServer.java:311)
        at 
org.apache.hadoop.gateway.GatewayServer.startGateway(GatewayServer.java:230)
        at org.apache.hadoop.gateway.GatewayServer.main(GatewayServer.java:113)
        at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
        at 
sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)
        at 
sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
        at java.lang.reflect.Method.invoke(Method.java:606)
        at 
org.apache.hadoop.gateway.launcher.Invoker.invokeMainMethod(Invoker.java:70)
        at org.apache.hadoop.gateway.launcher.Invoker.invoke(Invoker.java:39)
        at org.apache.hadoop.gateway.launcher.Command.run(Command.java:101)
        at org.apache.hadoop.gateway.launcher.Launcher.run(Launcher.java:69)
        at org.apache.hadoop.gateway.launcher.Launcher.main(Launcher.java:46)
Caused by: java.lang.NullPointerException
        at 
org.apache.hadoop.gateway.filter.rewrite.impl.xml.XmlRewriteRulesDigester$StepFactory.create(XmlRewriteRulesDigester.java:114)
        at 
org.apache.hadoop.gateway.filter.rewrite.impl.xml.XmlRewriteRulesDigester$FactoryRule.begin(XmlRewriteRulesDigester.java:224)
        at 
org.apache.commons.digester3.Digester.startElement(Digester.java:1350)
        ... 34 more
2016-02-01 22:53:57,667 ERROR hadoop.gateway 
(ServiceDefinitionsLoader.java:loadRewriteRules(102)) - Failed to unmarshall 
rewrite file 
/usr/hdp/2.3.2.0-2950/knox/bin/../data/services/elasticsearch/0.0.1/rewrite.xml 
file : java.io.IOException: org.xml.sax.SAXParseException; lineNumber: 3; 
columnNumber: 70; Error at line 3 char 70: null
{code}
This however does not prevent startup or typology deployment.  Critically in 
this case the rewrite rules for the affected services were not included in the 
deployed topology resulting in this error when that services was accessed at 
runtime.
{code}
2016-02-01 23:05:54,243 DEBUG hadoop.gateway (GatewayFilter.java:doFilter(110)) 
- Received request: GET /elasticsearch/v1
2016-02-01 23:05:54,295 INFO  hadoop.gateway 
(KnoxLdapRealm.java:getUserDn(550)) - Computed userDn: 
uid=guest,ou=people,dc=hadoop,dc=apache,dc=org using dnTemplate for principal: 
guest
2016-02-01 23:05:56,737 DEBUG hadoop.gateway 
(DefaultDispatch.java:executeOutboundRequest(110)) - Dispatch request: GET 
https://localhost:8443/gateway/default/elasticsearch/v1?user.name=guest
2016-02-01 23:05:56,892 WARN  hadoop.gateway 
(DefaultDispatch.java:executeOutboundRequest(129)) - Connection exception 
dispatching request: 
https://localhost:8443/gateway/default/elasticsearch/v1?user.name=guest 
javax.net.ssl.SSLHandshakeException: sun.security.validator.ValidatorException: 
PKIX path building failed: 
sun.security.provider.certpath.SunCertPathBuilderException: unable to find 
valid certification path to requested target
javax.net.ssl.SSLHandshakeException: sun.security.validator.ValidatorException: 
PKIX path building failed: 
sun.security.provider.certpath.SunCertPathBuilderException: unable to find 
valid certification path to requested target
{code}
The important thing to note in the above is that the URL is never rewritten.  
This is because the service's rules were never included in the deployed 
topology.



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

Reply via email to