Search code examples
javaxmloracle-databasesqlxml

jDeveloper ... can't get deployed jar to work (missing library?)


Obviously a deployment profile issue, but I'm about to toss my workstation through a window.

Includes:

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import javax.xml.stream.XMLStreamException;
import javax.xml.soap.MessageFactory;
import javax.xml.soap.SOAPBody;
import javax.xml.soap.SOAPEnvelope;
import javax.xml.soap.SOAPException;
import javax.xml.soap.SOAPMessage;
import javax.xml.xpath.XPathExpressionException;
import org.w3c.dom.Document;
import javax.xml.parsers.DocumentBuilder; 
import javax.xml.parsers.DocumentBuilderFactory;
import javax.xml.parsers.ParserConfigurationException;
import javax.xml.soap.SOAPConnection;
import javax.xml.soap.SOAPConnectionFactory;
import javax.xml.xpath.XPath;
import javax.xml.xpath.XPathConstants;
import javax.xml.xpath.XPathExpression;
import javax.xml.xpath.XPathFactory;
import org.w3c.dom.NodeList;
import org.xml.sax.InputSource;
import org.xml.sax.SAXException;

(There are others, but they aren't relevant)

private List<List<Object>> getPayloads(String url, String user, String pw) throws ClassNotFoundException, SQLException,
                                                                            NoClassDefFoundError {
    List<List<Object>> mismoPayloads = new ArrayList<List<Object>>();
    String DB_URL = url;
    String USER = user;
    String PASS = pw;
    Connection conn = null;
    Statement stmt = null;
    Class.forName("oracle.jdbc.driver.OracleDriver");
    conn = DriverManager.getConnection(DB_URL, USER, PASS);
    stmt = conn.createStatement();
    String sql;
    sql = "select fha_case_number, loan_number, replace(replace(to_char(score_dt),'/','-'),':',' ') as score_dt, aus, aq.total_mismo_payload.total_request_response from X04180.total_mismo_archive aq";
    ResultSet rs = stmt.executeQuery(sql);
    while (rs.next()) {
        //Retrieve by column name
        List<String> thisRow = new ArrayList<String>();
        String xmlContent = rs.getSQLXML("total_mismo_payload.total_request_response").getString();
        String loanNumber = rs.getString("loan_number");
        String caseNumber = rs.getString("fha_case_number");
        String ausID = rs.getString("aus");
        String scoreDate = rs.getString("score_dt");
        thisRow.add(scoreDate + "_" + caseNumber + "_" + loanNumber + "_" + ausID + ".xml");
        thisRow.add(xmlContent);
        mismoPayloads.add((List) thisRow);
    }
    rs.close();
    stmt.close();
    conn.close();
    return mismoPayloads;
}

I have this in the manifest:

Manifest-Version: 1.0
Class-Path: . .. 
 ./lib/ojdbc.policy 
 ./lib/ojdbc8.jar 
 ./lib/ons.jar 
 ./lib/oraclepki.jar 
 ./lib/orai18n.jar 
 ./lib/osdt_cert.jar 
 ./lib/osdt_core.jar 
 ./lib/simplefan.jar 
 ./lib/ucp.jar 
 ./lib/xdb6.jar 
 ./lib/oracle.xdk/oraclexsql.jar
 ./lib/oracle.xdk/oxquery-ee.jar
 ./lib/oracle.xdk/oxquery-xmlbeans-interop.jar
 ./lib/oracle.xdk/oxquery.jar
 ./lib/oracle.xdk/xml.jar
 ./lib/oracle.xdk/xmlmesg.jar
 ./lib/oracle.xdk/xmlparserv2.jar
 ./lib/oracle.xdk/xmlparserv2_jaxp_services.jar
 ./lib/oracle.xdk/xmlparserv2_sans_jaxp_services.jar
 ./lib/oracle.xdk/xqjapi.jar
 ./lib/oracle.xdk/xquery.jar
 ./lib/oracle.xdk/xsqlserializers.jar
 ./lib/oracle.xdk/xsu12.jar
Main-Class: f17.ProcessPayload

All those jars do exist in that "lib" folder. The "lib" folder is in the same folder as the executable jar. I have verified that the driver (ojdbc8.jar) gets loaded (I can change the error message by moving it.

The only thing I can think of is that there is some other dependency that jDeveloper is loading, but failing to deploy to the jar, but I can't see what it is.

The project runs great from the toolset, but errors as such when run as an executable jar file.

oracle/xml/binxml/BinXMLMetadataProvider
[oracle.jdbc.driver.NamedTypeAccessor$XMLFactory.createXML(NamedTypeAccessor.java:115)
 oracle.jdbc.driver.NamedTypeAccessor.getOracleObject(NamedTypeAccessor.java:233)
 oracle.jdbc.driver.NamedTypeAccessor.getSQLXML(NamedTypeAccessor.java:332)
 oracle.jdbc.driver.GeneratedStatement.getSQLXML(GeneratedStatement.java:278)
 oracle.jdbc.driver.GeneratedScrollableResultSet.getSQLXML(GeneratedScrollableResultSet.java:359)
 oracle.jdbc.driver.GeneratedResultSet.getSQLXML(GeneratedResultSet.java:590)
 f17.ProcessPayload.getPayloads(ProcessPayload.java:195)
 f17.ProcessPayload.main(ProcessPayload.java:115)]

I should mention that the below line that the error comes from:

String xmlContent = rs.getSQLXML("total_mismo_payload.total_request_response").getString();

Solution

  • I recreated the project in Eclipse and deployed a working jar without drama. This is a jDeveloper issue.

    My problem is solved, but jDeveloper clearly has issues. If someone wants to chime in with the differences in deploying from Eclipse and deploying from jDeveloper, it might be helpful to others.

    I only use jDeveloper because we do some Oracle Fusion stuff.