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)