You are viewing a plain text version of this content. The canonical link for it is here.
Posted to issues@camel.apache.org by "Richard Groote (JIRA)" <ji...@apache.org> on 2017/10/10 14:15:00 UTC
[jira] [Updated] (CAMEL-11891) XML2JSON Data Format and empty
requests
[ https://issues.apache.org/jira/browse/CAMEL-11891?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel ]
Richard Groote updated CAMEL-11891:
-----------------------------------
Description:
It would be nice if the XmlJsonDataFormat can handle empty body.
In our project we upgraded from 2.14.0 to 2.19.3.
The below code no longer works in 2.19.3 when a GET request is made to a servlet component. In our situation the body contains a stream cache and the xml2json will fail.
A possible solution is to check the http method before doing the unmarshalling.
<camel:choice>
<camel:when>
<camel:simple>${body} != null</camel:simple>
<camel:unmarshal ref="xml2json"/>
</camel:when>
</camel:choice>
The current solution in our project is a extension of the XmlJsonDataFormat.
In the extension the method unmarshall is overriden
{code:java}
@Override
public Object unmarshal(Exchange exchange, InputStream stream) throws Exception {
Object inBody = exchange.getIn().getBody();
if(inBody == null) {
return null;
}
if(inBody instanceof StreamCache) {
long length = ((StreamCache) inBody).length();
if(length <= 0) {
return null;
}
} else {
if(!(inBody instanceof JSON)) {
String jsonString = exchange.getContext().getTypeConverter().convertTo(String.class, exchange, inBody);
if(StringUtils.isEmpty(jsonString)) {
return null;
}
}
}
return super.unmarshal(exchange, stream);
}
{code}
was:
It would be nice if the XmlJsonDataFormat can handle empty body.
In our project we upgraded from 2.14.0 to 2.19.3.
The below code no longer works in 2.19.3 when a GET request is made to a servlet component. In our situation the body contains a stream cache and the xml2json will fail.
A possible solution is to check the http method before doing the unmarshalling.
<camel:choice>
<camel:when>
<camel:simple>${body} != null</camel:simple>
<camel:unmarshal ref="xml2json"/>
</camel:when>
</camel:choice>
The current solution in our project is a extension of the XmlJsonDataFormat.
In the extension the method unmarshall is overriden
@Override
public Object unmarshal(Exchange exchange, InputStream stream) throws Exception {
Object inBody = exchange.getIn().getBody();
if(inBody == null) {
return null;
}
if(inBody instanceof StreamCache) {
long length = ((StreamCache) inBody).length();
if(length <= 0) {
return null;
}
} else {
if(!(inBody instanceof JSON)) {
String jsonString = exchange.getContext().getTypeConverter().convertTo(String.class, exchange, inBody);
if(StringUtils.isEmpty(jsonString)) {
return null;
}
}
}
return super.unmarshal(exchange, stream);
}
> XML2JSON Data Format and empty requests
> ---------------------------------------
>
> Key: CAMEL-11891
> URL: https://issues.apache.org/jira/browse/CAMEL-11891
> Project: Camel
> Issue Type: Improvement
> Components: camel-xmljson
> Affects Versions: 2.19.3
> Reporter: Richard Groote
>
> It would be nice if the XmlJsonDataFormat can handle empty body.
> In our project we upgraded from 2.14.0 to 2.19.3.
> The below code no longer works in 2.19.3 when a GET request is made to a servlet component. In our situation the body contains a stream cache and the xml2json will fail.
> A possible solution is to check the http method before doing the unmarshalling.
> <camel:choice>
> <camel:when>
> <camel:simple>${body} != null</camel:simple>
> <camel:unmarshal ref="xml2json"/>
> </camel:when>
> </camel:choice>
> The current solution in our project is a extension of the XmlJsonDataFormat.
> In the extension the method unmarshall is overriden
> {code:java}
> @Override
> public Object unmarshal(Exchange exchange, InputStream stream) throws Exception {
> Object inBody = exchange.getIn().getBody();
>
> if(inBody == null) {
> return null;
> }
>
> if(inBody instanceof StreamCache) {
> long length = ((StreamCache) inBody).length();
> if(length <= 0) {
> return null;
> }
> } else {
> if(!(inBody instanceof JSON)) {
> String jsonString = exchange.getContext().getTypeConverter().convertTo(String.class, exchange, inBody);
> if(StringUtils.isEmpty(jsonString)) {
> return null;
> }
> }
> }
>
>
>
> return super.unmarshal(exchange, stream);
> }
> {code}
>
--
This message was sent by Atlassian JIRA
(v6.4.14#64029)