Merge pull request #58 from sslavic/SPR-7865

* SPR-7865:
  Use configured encoding during JiBX unmarshalling
This commit is contained in:
Chris Beams 2012-03-15 15:14:52 +02:00
commit bb5c81e0c5
4 changed files with 46 additions and 14 deletions

View File

@ -1,5 +1,5 @@
/*
* Copyright 2002-2011 the original author or authors.
* Copyright 2002-2012 the original author or authors.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
@ -349,7 +349,7 @@ public class JibxMarshaller extends AbstractMarshaller implements InitializingBe
protected Object unmarshalInputStream(InputStream inputStream) throws XmlMappingException, IOException {
try {
IUnmarshallingContext unmarshallingContext = createUnmarshallingContext();
return unmarshallingContext.unmarshalDocument(inputStream, null);
return unmarshallingContext.unmarshalDocument(inputStream, encoding);
}
catch (JiBXException ex) {
throw convertJibxException(ex, false);

View File

@ -1,5 +1,5 @@
/*
* Copyright 2006 the original author or authors.
* Copyright 2006-2012 the original author or authors.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
@ -18,13 +18,23 @@ package org.springframework.oxm.jibx;
public class FlightType {
protected long number;
protected String airline;
public long getNumber() {
return this.number;
}
protected long number;
public void setNumber(long number) {
this.number = number;
}
public String getAirline() {
return this.airline;
}
public void setAirline(String airline) {
this.airline = airline;
}
public long getNumber() {
return this.number;
}
public void setNumber(long number) {
this.number = number;
}
}

View File

@ -1,5 +1,5 @@
/*
* Copyright 2002-2009 the original author or authors.
* Copyright 2002-2012 the original author or authors.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
@ -16,13 +16,17 @@
package org.springframework.oxm.jibx;
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertNotNull;
import org.junit.Ignore;
import java.io.ByteArrayInputStream;
import javax.xml.transform.stream.StreamSource;
import org.junit.Ignore;
import org.junit.Test;
import org.springframework.oxm.AbstractUnmarshallerTests;
import org.springframework.oxm.Unmarshaller;
import static org.junit.Assert.*;
/**
* @author Arjen Poutsma
*
@ -31,6 +35,10 @@ import org.springframework.oxm.Unmarshaller;
*/
public class JibxUnmarshallerTests extends AbstractUnmarshallerTests {
protected static final String INPUT_STRING_WITH_SPECIAL_CHARACTERS =
"<tns:flights xmlns:tns=\"http://samples.springframework.org/flight\">" +
"<tns:flight><tns:airline>Air Liberté</tns:airline><tns:number>42</tns:number></tns:flight></tns:flights>";
@Override
protected Unmarshaller createUnmarshaller() throws Exception {
JibxMarshaller unmarshaller = new JibxMarshaller();
@ -60,4 +68,17 @@ public class JibxUnmarshallerTests extends AbstractUnmarshallerTests {
// JiBX does not support reading XML fragments, hence the override here
}
@Test
public void unmarshalStreamSourceInputStreamUsingNonDefaultEncoding() throws Exception {
String encoding = "ISO-8859-1";
((JibxMarshaller)unmarshaller).setEncoding(encoding);
StreamSource source = new StreamSource(new ByteArrayInputStream(INPUT_STRING_WITH_SPECIAL_CHARACTERS.getBytes(encoding)));
Object flights = unmarshaller.unmarshal(source);
testFlights(flights);
FlightType flight = ((Flights)flights).getFlight(0);
assertEquals("Airline is invalid", "Air Liberté", flight.getAirline());
}
}

View File

@ -8,6 +8,7 @@
</mapping>
<mapping name="flight" class="org.springframework.oxm.jibx.FlightType">
<namespace uri="http://samples.springframework.org/flight" default="elements"/>
<value name="airline" field="airline" usage="optional"/>
<value name="number" field="number" usage="required"/>
</mapping>
</binding>