Axis2: извлечь явный XML из строго типизированных классов ответов? - PullRequest
1 голос
/ 13 октября 2009

У меня есть устаревшая веб-служба Java, основанная на Axis2. Эти классы веб-сервиса состоят из:

  • интерфейс службы (сгенерированный из WSDL);
  • реализация услуги (написано внутри компании);
  • группа автоматически сгенерированных сущностных классов, представляющих запросы и ответы.

У меня также есть требование извлекать и кэшировать часть одного из ответов на XML (в конечном счете, перейдя в файловую систему как правильно сформированный документ). Я взломал метод getOMElement() классов ответа для сериализации, но безрезультатно. Десериализация выглядит проще, поскольку все сгенерированные классы имеют Factory статический член, который будет принимать XML и создавать объекты.

как я могу сериализовать подмножество графов объектов со строгой типизацией в XML таким образом, чтобы сгенерированная Axis2 Factory могла впоследствии десериализоваться?

ps: я застрял в Axis2. Да, это очень легко с (скажем) xfire ...

1 Ответ

1 голос
/ 30 октября 2009

Для полноты, вот решение, которое я в итоге придумала ...

объект -> XML (это нехорошо):

// in this case, response is the Axis2 generated class at the root
// of the webservice response
String xml = response.getOMElement(null, null).toString();

XML -> объект (только чуть менее неприятный):

// xml is the string we created earlier
XMLStreamReader reader = XMLInputFactory
                                .newInstance()
                                .createXMLStreamReader(new StringReader(xml));

// WebserviceResponse is the class generated by Axis2        
return WebserviceResponse.Factory.parse(reader); 

Ни один из этих методов не хорош, но, по крайней мере, они функциональны (и окружены серьезным модульным тестированием ...).

...