A múltkor JAXB-vel kellett átvinnem egy InputStream-et is tartalmazó osztályt. Neten nem találtam rá semmi értelmeset, így lásd lentebb az én megoldásom.
Az InputStream szerializálásához egy adapterosztályt írtam, ami bájttömbbé alakítja az InputStream-et, illetve ugyanezt megteszi a másik irányba is. A bájttömböt pedig már tudja a JAXB is kezelni. Ezután már csak a szerializálandó osztály InputStream mezőjét kell a következőképp annotálni:
@XmlJavaTypeAdapter(InputStreamAdapter.class) private InputStream data;
Az adapterosztály pedig a következő:
import java.io.ByteArrayInputStream; import java.io.ByteArrayOutputStream; import java.io.IOException; import java.io.InputStream; import javax.xml.bind.annotation.adapters.XmlAdapter; /** * JAXB Adapterosztály InputStream-ek szerializálásához. * * @author palacsint */ public class InputStreamAdapter extends XmlAdapter<byte[], InputStream> { @Override public byte[] marshal(final InputStream inputStream) throws Exception { return inputStreamToByteArray(inputStream); } @Override public InputStream unmarshal(byte[] byteArray) throws Exception { return new ByteArrayInputStream(byteArray); } public static byte[] inputStreamToByteArray(final InputStream inputStream) throws IOException { final ByteArrayOutputStream out = new ByteArrayOutputStream(4096); try { final byte[] buffer = new byte[1024]; int len; while ((len = inputStream.read(buffer)) >= 0) { out.write(buffer, 0, len); } } finally { inputStream.close(); out.close(); } return out.toByteArray(); } }
Persze ilyenkor a kiolvasás miatt elvész az adat az InputStream-ből.
Legutóbbi hozzászólások
9 év 15 hét
10 év 4 hét
10 év 8 hét
10 év 26 hét
11 év 28 hét
11 év 34 hét
11 év 34 hét
11 év 35 hét
11 év 45 hét
12 év 15 hét