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:14:00 UTC

[jira] [Created] (CAMEL-11891) XML2JSON Data Format and empty requests

Richard Groote created CAMEL-11891:
--------------------------------------

             Summary: 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


	@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);
	}








--
This message was sent by Atlassian JIRA
(v6.4.14#64029)