Tuesday, October 26, 2010

invalid element "{http://schemas.xmlsoap.org/wsdl/}definitions" in configuration file (line 2)



Problem:
This is one of the Common Exceptions which we come across daily in our lives. When i was trying to run wscompile command to generate java client classes from a WSDL file.

Exception i encountered was:
"invalid element "{http://schemas.xmlsoap.org/wsdl/}definitions" in configuration file (line 2)"

Solution:
The real culprit for this exception was config.xml file. I just copy pasted the complete WSDL file into the config.xml file instead of just refering WSDL file.

For example:
Syntax for Config.xml file:

*******************************************************************************************************************************************************************

The wscompile command reads the config.xml file, which has the information about web service. This is how config.xml file looks:

<?xml version="1.0" encoding="UTF-8"?>
<configuration
xmlns="http://java.sun.com/xml/ns/jax-rpc/ri/config">
<service> or <wsdl> or <modelfile>
</configuration>
The <configuration> element may contain exactly one <service>, <wsdl>, or <modelfile> element.

The <service> Element

If you specify this element, wscompile reads the service endpoint interface that describes the service and generates a WSDL file. In the <interface> subelement, the name attribute specifies the service endpoint interface, and the servantName attribute specifies the class that implements the interface. For example:

<service name="CollectionIF_Service"
targetNamespace="http://echoservice.org/wsdl"
typeNamespace="http://echoservice.org/types"
packageName="stub_tie_generator_test">
<interface name="stub_tie_generator_test.CollectionIF"
servantName="stub_tie_generator_test.CollectionImpl"/>
</service>
The <wsdl> Element

If you specify this element, wscompile reads the service's WSDL file and generates the service endpoint interface. The location attribute specifies the URL of the WSDL file, and the packageName attribute specifies the package of the classes generated by wscompile. For example:

<wsdl
location="http://tempuri.org/sample.wsdl"
packageName="org.tempuri.sample" />

The <modelfile> Element

This element is for advanced users.

If config.xml contains a <service> or <wsdl> element, wscompile generates a model file that contains the internal data structures that describe the service. If you've already generated a model file in this manner, then you can reuse it the next time you run wscompile. For example:

<modelfile location="mymodel.xml.gz"/>

*******************************************************************************************************************************************************************

Command:
java com.sun.xml.rpc.tools.wscompile.Main -gen:client -d <<Give the destination folder>> <<config.xml>> C:\Rahamat\Axis\wscompile\config.xml

Similar Exceptions:
     - Exception Occured invalid element "{http://schemas.xmlsoap.org/wsdl/}definitions" in configuration file (line 2)

Wednesday, May 5, 2010

java.sql.SQLException: Invalid Oracle URL specified: OracleDataSource.makeURL



Problem :
We come across this exception when DB connection is involved. This is the issue when we migrate DB from Oracle 9i to 10g.

Exception I Encountered Was :

============================================================================================
<May 5, 2010 9:43:16 AM GMT> <Notice> <StdErr> <BEA-000000> <java.sql.SQLException: Invalid Oracle URL specified: OracleDataSource.makeURL>
<May 5, 2010 9:43:16 AM GMT> <Notice> <StdErr> <BEA-000000> <at oracle.jdbc.driver.DatabaseError.throwSqlException(DatabaseError.java:112)>
<May 5, 2010 9:43:16 AM GMT> <Notice> <StdErr> <BEA-000000> <at oracle.jdbc.driver.DatabaseError.throwSqlException(DatabaseError.java:146)>
<May 5, 2010 9:43:16 AM GMT> <Notice> <StdErr> <BEA-000000> <at oracle.jdbc.pool.OracleDataSource.makeURL(OracleDataSource.java:1353)>
<May 5, 2010 9:43:16 AM GMT> <Notice> <StdErr> <BEA-000000> <at oracle.jdbc.pool.OracleDataSource.getConnection(OracleDataSource.java:195)>
<May 5, 2010 9:43:16 AM GMT> <Notice> <StdErr> <BEA-000000> <at oracle.jdbc.pool.OracleDataSource.getConnection(OracleDataSource.java:165)>
<May 5, 2010 9:43:16 AM GMT> <Notice> <StdErr> <BEA-000000> <at com.hp.smartquote.standalone.SQStandaloneConnectionFactory.getConnection(SQStandaloneConnectionFactory.java:54)>
<May 5, 2010 9:43:16 AM GMT> <Notice> <StdErr> <BEA-000000> <at com.hp.smartquote.standalone.SQStandaloneUtil.getConnection(SQStandaloneUtil.java:155)>
<May 5, 2010 9:43:16 AM GMT> <Notice> <StdErr> <BEA-000000> <at com.hp.smartquote.standalone.SQStandaloneUtil.getUserRecord(SQStandaloneUtil.java:88)>
============================================================================================

Solution:

In my code after setting all the default connection properties i was setting caching properties. This was causing the exception. When i deleted this part from code it started working fine. Hope it works for you too. For detailed explanation see the example too.

Example:
My Java file for connection was SQStandaloneConnectionFactory.java.
In this file i was setting the cache properties as:
===================================================================
dataSource.setConnectionCachingEnabled(true);
Properties cacheProps = new Properties();
cacheProps.setProperty("MinLimit", "1");
cacheProps.setProperty("MaxLimit", "6");
cacheProps.setProperty("InitialLimit", "1");
cacheProps.setProperty("ConnectionWaitTimeout", "6");
cacheProps.setProperty("ValidateConnection", "true");
dataSource.setConnectionCacheProperties(cacheProps);
====================================================================
I Just removed this properties from my code and it started working fine.

Similar Exception:
- Invalid Oracle URL specified error during startup
- ORA-17067: Invalid Oracle URL specified