Hello Oleg
A day of surprises. Really was not a bug. In JIRA Castor 1.3.1 is not available on MvnRepository
Said
Basically, the 'castor' artefact turns out to be the root POM of the complete project. If you are interested in e.g. XML data binding, please have a look at the castor-xml artefact, where you'll find all past releases.
Wondered why a simple message was not included somewhere, anyway
In Castor's mailing list I have the follow
Castor 1.3.1 is not available on MvnRepository
(seems Castor has a bug or its new 1.3.2 API has a new behaviour against 1.2, why?, see below my results)
Therefore I changed from
Code:
<!-- Castor -->
<dependency>
<groupId>org.codehaus.castor</groupId>
<artifactId>castor</artifactId>
<version>1.2</version>
</dependency>
<!-- Castor - Xerces -->
<dependency>
<groupId>xerces</groupId>
<artifactId>xercesImpl</artifactId>
<version>2.9.1</version>
</dependency>
To only to
Code:
<dependency>
<groupId>org.codehaus.castor</groupId>
<artifactId>castor-xml</artifactId>
<version>1.3.2</version>
</dependency>
I got the same exception working with castor-xml and DOMResult!
Code:
2011-07-12 12:41:40,296 INFO [org.springframework.integration.handler.LoggingHandler] -
<[Payload=javax.xml.transform.dom.DOMResult@14a7a12]
[Headers={timestamp=1310492500296, id=fa7359ae-6384-4413-bc4b-1489603560be}]>
2011-07-12 12:41:40,296 INFO [org.springframework.integration.handler.LoggingHandler] -
<[Payload=javax.xml.transform.dom.DOMResult@14a7a12]
[Headers={timestamp=1310492500296, id=76f33ec9-05a3-4e9e-bbcf-66c000b4c2c8}]>
Exception in thread "main"
org.springframework.integration.transformer.MessageTransformationException:
failed to transform message
at org.springframework.integration.transformer.AbstractTransformer.transform(AbstractTransformer.java:44)
....
Caused by: org.springframework.oxm.UnmarshallingFailureException:
Castor unmarshalling exception;
nested exception is org.exolab.castor.xml.MarshalException:
Content is not allowed in prolog.{File: [not available]; line: 1; column: 1}
at org.springframework.oxm.castor.CastorMarshaller.convertCastorException(CastorMarshaller.java:487)
....
Caused by: org.exolab.castor.xml.MarshalException:
Content is not allowed in prolog.{File: [not available]; line: 1; column: 1}
at org.exolab.castor.xml.Unmarshaller.convertSAXExceptionToMarshalException(Unmarshaller.java:866)
Caused by: org.xml.sax.SAXParseException:
Content is not allowed in prolog.
at com.sun.org.apache.xerces.internal.util.ErrorHandlerWrapper.createSAXParseException(ErrorHandlerWrapper.java:195)
Now if I use this *Echo*
Code:
@Component
public class EchoTransformer {
private static final Logger logger = LoggerFactory.getLogger(EchoTransformer.class);
public Node showAsDOMNode(DOMResult domResult) {
Node node = domResult.getNode();
logger.info("*** asDOMNode");
System.out.println(node);
logger.info(node.toString());
logger.info("***");
return node;
}
public String showAsString(Object object) {
String string = object.toString();
System.out.println("** Log: Inside Transformer");
System.out.println(string);
logger.info("***");
return string;
}
}
Therefore I must work now in this way (I just created an altern file to add these changes about the new Transformer and re order the input/ouput channels for each transformer)
Code:
<int-xml:marshalling-transformer
marshaller="castorMarshaller"
result-type="DOMResult"
input-channel="input"
output-channel="xml"
/>
<int:transformer input-channel="xml"
output-channel="dom"
ref="echoTransformer"
method="showAsDOMNode"
/>
<int-xml:unmarshalling-transformer
unmarshaller="castorMarshaller"
input-channel="xml-string"
output-channel="output"
/>
<int:object-to-string-transformer
input-channel="dom"
output-channel="xml-string" />
I have the same exception shown above but showing now
Code:
2011-07-12 12:58:58,484 INFO [org.springframework.integration.handler.LoggingHandler] -
<[Payload=javax.xml.transform.dom.DOMResult@118fa47]
[Headers={timestamp=1310493538484, id=8d81c1a1-65dc-424c-b49f-1fcf37fb6cf7}]>
2011-07-12 12:58:58,500 INFO [com.manuel.jordan.main.transformers.echo.EchoTransformer] -
<*** asDOMNode>
[#document: null]
2011-07-12 12:58:58,500 INFO [com.manuel.jordan.main.transformers.echo.EchoTransformer] -
<[#document: null]>
2011-07-12 12:58:58,500 INFO [com.manuel.jordan.main.transformers.echo.EchoTransformer] -
<***>
2011-07-12 12:58:58,500 INFO
[org.springframework.integration.handler.LoggingHandler] -
<[Payload=[#document: null]]
[Headers={timestamp=1310493538500, id=8c224986-af14-4a00-98dd-4360254cd34d}]>
... Rest of the same exception shown above in red
Compare the second blue part shown above, with the second blue part shown below
I mean
Code:
2011-07-12 12:41:40,296 INFO [org.springframework.integration.handler.LoggingHandler] -
<[Payload=javax.xml.transform.dom.DOMResult@14a7a12]
[Headers={timestamp=1310492500296, id=76f33ec9-05a3-4e9e-bbcf-66c000b4c2c8}]>
vs
Code:
[org.springframework.integration.handler.LoggingHandler] -
<[Payload=[#document: null]]
[Headers={timestamp=1310493538500, id=8c224986-af14-4a00-98dd-4360254cd34d}]>
Is null the DOMResult, why?
Now with this update about the new dependency, StringResult no work anymore, please read the next post