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 16 hét
10 év 5 hét
10 év 9 hét
10 év 27 hét
11 év 29 hét
11 év 35 hét
11 év 35 hét
11 év 36 hét
11 év 46 hét
12 év 16 hét