/ / Korzystanie z adnotacji @XmlCDATA MOXy z jersey - jaxb, jersey, weblogic-10.x, jaxb2, moxy

Używanie adnotacji MOXy @XmlCDATA z jerseyem - jaxb, jersey, weblogic-10.x, jaxb2, moxy

Pracuję nad usługą REST napisaną z jersey i próbuję wyprowadzić trochę XML z sekcjami CDATA. rozumiem referencyjna implementacja JAXB tego nie obsługuje, więc pobrałem MOXy EclipseLink i próbuję uzyskać adnotację @XmlCDATA do działania.

Moja zmapowana fasola JAXB wygląda tak

package com.me.entities;

@XmlRootElement @XmlAccessorType(XmlAccessType.FIELD)
public class MyBean {

@XmlAttribute
private URI thumbnail;

@XmlElement(name="longdescription") @XmlCDATA
private String description;

public MyBean() { }

public final String getDescription() { return description; }

public final void setDescription(String d) { this.description = d; }
}

i mam jaxb.properties plik w com/me/entities wraz z plikami klas. Plik właściwości ma

javax.xml.bind.context.factory=org.eclipse.persistence.jaxb.JAXBContextFactory

w tym. Jestem pewien, że zostanie pomyślnie załadowany, ponieważ jeśli zastąpię nazwę klasy fabrycznej jakimś nonsensem, aplikacja się psuje. Ponadto jawne zestawianie pliku tworzącego JAXBContext na moich własnych pracach działa dobrze, więc problem wydaje się być związany z jersey. Według to moja konfiguracja jest w porządku, ale kiedy mój zasób Jersey zwraca instancję MyBean

...
@GET @Produces(MediaType.TEXT_XML)
public MyBean getMyBean() {
MyBean b = new MyBean();
b.setDescription("Some blurb plenty of invalid chars like <<< && >>>");

return b;
}

to, co otrzymam, nie ma w sobie CDATA, ale wygląda

<?xml version="1.0" encoding="utf-8"?>
<info><longdescription>Some blurb plenty of invalid chars like &lt;&lt;&lt; &amp;&amp; >>></longdescription></info>

Co ja robię źle?

Odpowiedzi:

2 dla odpowiedzi № 1

Wygląda na to, że problemem był mój serwer aplikacji: korzystam z niego WebLogic 10.3.5 w trybie programowania, który zawiera wiele wstępnie zainstalowanych bibliotek wspólnych, które w domyślnej konfiguracji mają pierwszeństwo przed bibliotekami wdrażanymi w aplikacji internetowej WEB-INF/lib teczka.

Aby to naprawić, potrzebny jest opis aplikacji specyficzny dla weblogu, wystarczy utworzyć plik weblogic.xml plik wewnątrz WEB-INF zawierające prefer-web-inf-classes opcja. Plik, którego użyłem, to:

<?xml version="1.0" standalone="yes"?>
<weblogic-web-app>
<container-descriptor>
<prefer-web-inf-classes>true</prefer-web-inf-classes>
</container-descriptor>
</weblogic-web-app>

Nadal nie mam pojęcia, która biblioteka była problemem, każdy wie, że możesz edytować tę odpowiedź.


0 dla odpowiedzi nr 2

Pobierz Jaxb Extension: Jest to rozszerzenie open source Eclipselink dla Jaxb. Pobierz plik jar: kopię eclipselink.jar do biblioteki lib projektu.

http://www.eclipse.org/eclipselink/downloads/
EclipseLink 2.4.1 Installer Zip (37 MB)

I patrz przykład na:

http://theopentutorials.com/tutorials/java/jaxb/jaxb-marshalling-and-unmarshalling-cdata-block-using-eclipselink-moxy/

Dobry wygląd!.