Wednesday, 20 June 2012

org.xml.sax.SAXParseException: schema_reference.4: Failed to read schema document 'http://www.springframework.org/schema/tx/spring-tx-3.1.xsd', because 1) could not find the document; 2) the document could not be read; 3) the root element of the document is not .

Exception in spring roo generated application when run offline

org.xml.sax.SAXParseException: schema_reference.4: Failed to read schema document 'http://www.springframework.org/schema/tx/spring-tx-3.1.xsd', because 1) could not find the document; 2) the document could not be read; 3) the root element of the document is not .

To identify the issue, take at look at maven dependency hierarchy and see the corresponding jar version from which the xsd is included. In my case, spring-security-web was referring to a 3.0.5 version of spring-tx that resulted in the exception.

I had to explicitly include 3.1.0 version of spring-tx in my pom file and the issue is gone.

Wednesday, 16 May 2012

JAXB: Marshal exception while marshalling generics, class nor any of its classes known to this context

If you have a class as ServiceResult<T> with a generic parameter and you get exception as "class my.examples.dto.ResultDto nor any of its classes known to this context" while marshalling although you have ResultDto in Jaxb context, try @XmlSeeAlso as below

@XmlRootElement
@XmlSeeAlso(ResultDto.class, ResultDtoAnother.class)
public class ServiceResult<T> {
public T result;
}

This resolves the issue temporarily until we have a cleaner solution from JaxB

Thursday, 8 March 2012

Download the latest snapshot from nexus using wget

From Maven 3, support for uniqueVersion is disabled and when you distribute your snapshots by publishing them on nexus you end up with snapshot names ending with timestamps. Suddenly your QA or Integration server scripts start failing if you are getting war file from nexus repository as there is no unique name now.

To get the latest version of snapshot you can use a service available from Nexus as

wget -O my-services.war http://nexus.myorg.net/nexus/service/local/artifact/maven/redirect?r=snapshots\&g=my.company.product.services\&a=my-services\&v=1.0-SNAPSHOT\&p=war

Where
r is the id of the repository
g is the group id
a is the artifact id
v is the version of artifact
p is the packaging type

The argument -O helps in renaming the output file to the name you want so that you have a fixed name you can use in your shell script.

Wednesday, 28 September 2011

Tomcat remote debugging from eclipse

To enable debug on tomcat, set the following line in your catalina.bat

DEBUG_OPTS=-Xdebug -Xrunjdwp:transport=dt_socket,address=8000,server=y,suspend=n

From your eclipse, create a Run Configuration for 'Remote Java Application' on socket 8000 and restart tomcat.

Wednesday, 7 September 2011

Auto scan hibernate entity beans like component-scan for general spring components

Use the following configuration to auto scan your hibernate entity beans.

<bean id="sessionFactory" class="org.springframework.orm.hibernate3.annotation.AnnotationSessionFactoryBean">

<property name="dataSource" ref="resourcesDataSource" />
<property name="packagesToScan">
<list>
<value>my.packages.hibernate.domain</value>
</list>
</property>
<property name="hibernateProperties">
<props>
<prop key="hibernate.dialect">org.hibernate.dialect.Oracle9Dialect</prop>
<prop key="hibernate.show_sql">true</prop>
</props>

</property>
</bean>

Tuesday, 23 August 2011

Tomcat 6– Enable httpOnly and secure for jesssionid cookie

 

According to the release notes at http://tomcat.apache.org/tomcat-6.0-doc/changelog.html this looks to be implemented only from 6.0.33. Update your tomcat version before you try this configuration change.

Modify your context.xml under tomcat/conf directory by including this extra tag.

<Context>
<Manager useHttpOnly="true" />

</Context>

To make cookie secure, add the attribute secure="true" to the <Connector definition in server.xml

Friday, 19 August 2011

GWT/SmartGWT– Window popups with widgets

 

Recently I was implementing help infrastructure for our application. I wanted to have a help window open as a real popup and not a div popup that can hold smartgwt widgets to show help info.

There was no direct support for this in gwt or smartgwt however this can be achieved with a small hack.

Open a popup window by using the following JSNI script. This opens a new window popup with your own parameters and return the document from JSNI method. This gives you handle to popup’s document element.

private static native Document createWindowPopup() /*-{
        var win = window.open("", "win", "width=500,height=300,status=1,resizeable=1,scrollbars=1"); // a window object
        win.document.open("text/html", "replace");
        win.focus();
        return win.document;
    }-*/;

If you have handle to this document object you can simply add any widget to this document by

document.appendChild(myWidget.getElement());


Dont forget to close the document after writing to it.

private static native void closeDocument(Document document) /*-{
document.close();
}-*/;