středa 13. února 2013

Jax-WS - SchemaValidation zkouší číst stream 2x

JAX-WS, Metro, hází "Stream already closed" Při použití streamovaného dataSource Stane se to, že když je zapnutá Schema Validation, tak při validaci se přečte celý stream (ten attachment). Takže validace ho celý přečte a když dojde na skutečné spracování requestu a chtějí se přečíst data, tak to hodí "Stream already closed". A je po srandě.

Neznám žádné rozumné řešení tohoto problému. U nás jsme to pořešili tím, že jsme udělali vlastní DataSource. Která obalí skutečný stream a při prvním zavolání metody getInputStream() - což je z validace nevrátí skutečný stream, ale jen "new ByteArrayInputStream(new byte[]{})"
A až při druhém zavolání metody getInputStream() vrátí skutečný stream.
Tím ho validace nezničí a vše funguje. Jak říkám, jestli ví někdo jak to řešit lépe - sem s tím.

Takový hrozný DataSource pak vypadá zhruba takhle:

Žádné komentáře:

Okomentovat