Сериализация с JAXB и Any

У меня есть схема, которая определяет следующий тип:

<xsd:complexType name="Payload">
   <xsd:sequence>
      <xsd:any namespace="##any" minOccurs="0" maxOccurs="unbounded" processContents="lax"/>
   </xsd:sequence>
</xsd:complexType>

И это создает объект так:

@XmlAccessorType(XmlAccessType.FIELD)
@XmlType(name = "Payload", propOrder = {
    "any"
})
public class Payload {

    @XmlAnyElement(lax = true)
    protected List<Object> any;
}

Теперь я пытаюсь добавить другой сгенерированный объект JAXB к этой полезной нагрузке, выполняя что-то вроде этого:

Class payloadClass = ...;
JAXBContext context = JAXBContext.newInstance( WrapperRequest.class, payloadClass);
...
marshaller.marshal( wrappedRequest );

Но я получаю ужасное исключение, которое выглядит так, будто оно никогда не сработает, поэтому я решил сначала сериализовать объект полезной нагрузки в XML, а затем добавить его в виде строки в полезную нагрузку.

StringWriter writer = new StringWriter();
JAXBContext context = JAXBContext.newInstance( sdoRequest.getClass() );
Marshaller marshaller = context.createMarshaller();
marshaller.marshal(new JAXBElement(new QName("uri", sdoRequest.getClass().getSimpleName()), sdoRequest.getClass(), sdoRequest), writer);
payload.getAny().add( writer.toString() );

И это взрывается с исключением, говоря, что "java.lang.String" не содержит @XmlRootElement.

Так как же будет работать xs: any с JAXB? Кажется, что ничего не хочет работать, потому что JAXB превращает полезную нагрузку в объект, и он ничего не сериализует в объекте. Это все внутри Axis2, так что добраться до этого момента было очень сложно.

Ответы на вопрос(2)

Ваш ответ на вопрос