You are viewing a plain text version of this content. The canonical link for it is here.
Posted to issues@drill.apache.org by "Daniel Barclay (Drill) (JIRA)" <ji...@apache.org> on 2015/03/26 01:03:53 UTC

[jira] [Commented] (DRILL-2570) Broken JDBC-All Jar packaging can cause missing XML classes

    [ https://issues.apache.org/jira/browse/DRILL-2570?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=14381072#comment-14381072 ] 

Daniel Barclay (Drill) commented on DRILL-2570:
-----------------------------------------------

Yes, it does seem to be a violation of Java's [service provider mechanism|http://docs.oracle.com/javase/8/docs/technotes/guides/jar/jar.html#Service_Provider] by Drill, because of a packaging inconsistency problem with the JDBC-all Jar file (e.g., drill-jdbc-all-0.8.0-SNAPSHOT.jar):

That Jar file contains a file at {{META-INF/services/javax.xml.parsers.SAXParserFactory}}, and that file says
"{{org.apache.xerces.jaxp.SAXParserFactoryImpl}}".

However, that Jar file does not contain the referenced class {{org.apache.xerces.jaxp.SAXParserFactoryImpl}} (does not contain file {{org/apache/xerces/jaxp/SAXParserFactoryImpl/class}}).

(Evidently:
- Java's {{javax.xml.parsers.SAXParserFactory.newInstance(...)}} uses Java's service provider mechanism for configuration, to know which implementation of {{SAXParserFactory}} to instantiate; 
- that mechanism finds Drill's  {{META-INF/services/javax.xml.parsers.SAXParserFactory}} file; and
- either {{org.apache.xerces.jaxp.SAXParserFactoryImpl}} doesn't exist anywhere on the class path, or, more likely, the mechanism looks only in the same Jar file in which it found the {{.../services/...}} file and so doesn't find class {{org.apache.xerces.jaxp.SAXParserFactoryImpl}} because Drill doesn't include it in the Jar file.)

It seems that the tool and/or the configuration that Drill uses to repackage the contents of original depended-on Jar files into JDBC-all doesn't understand and/or isn't configured enough to keep SPM references and classes synchronized.


> Broken JDBC-All Jar packaging can cause missing XML classes
> -----------------------------------------------------------
>
>                 Key: DRILL-2570
>                 URL: https://issues.apache.org/jira/browse/DRILL-2570
>             Project: Apache Drill
>          Issue Type: Bug
>            Reporter: Daniel Barclay (Drill)
>         Attachments: ElementTraversal.rtf, xerces-error.rtf
>
>
> [Transcribed from other medium:]
> - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 
> When starting Spotfire Server using JDBC driver an error see attachment (xerces-error) is produced.
> This error is then resolved by adding the jars/3rdparty/xercesImpl-2.11.0.jar from the drillbit package to the classpath for the JDBC client driver.
> Then the following error is observed. See attachment (ElementTraversal).
> This requires to add jars/3rdparty/xml-apis-1.4.01.jar to the classpath from the drillbit package.
> - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 
> The issue is Tomcat and Spotfire Server does not show any errors and starts up fine without the Drill JDBC driver. Once the Drill driver is added the application server fails to start with the errors shown.
> Adding the 2 jars to the classpath then resolves the issue.
> I have not looked at all the JDBC driver classes, but it is important to note that the error occurs when the JDBC driver is added and resolved by adding 2 jars from the drillbit package.
> - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 
> > I do not see Drill classes in the stack trace. This seems to be a Tomcat configuration issue.
> I suspect another possibility: that the Drill JDBC-all Jar file contains a stray reference to the unfound class (SAXParserFactoryImpl) in some file in META-INF/services (left over from some package whose classes we either excluded or renamed (with "shading")
> Xxx, Yyy: Can you try this?:
>     (Temporarily) removing the added XML Jar files from the class path to re-confirm the problem.
>     Move the Drill JDBC-all Jar file to be last on the class path (and remove ).
>     Report whether the symptoms change.
> Thanks.
> - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 



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