XMLBeans - xsi: type очищается с помощью Axis2 и Tomcat? - PullRequest
0 голосов
/ 24 февраля 2010

Я новичок в XMLBeans и пытаюсь использовать его для создания XML-документа как части веб-службы axis2. Когда я запускаю свой код как стандартное приложение Java или как стандартный сервлет, XML генерируется правильно:

<?xml version="1.0" encoding="UTF-8"?>
<c:BroadsoftDocument protocol="OCI" xmlns:c="C">
<sessionId>000000001</sessionId>
<command xsi:type="AuthenticationRequest" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<userId>admin</userId></command>
</c:BroadsoftDocument>

Однако, когда точно такой же код запускается в Axis2 и Tomcat в сервлете, я получаю:

<?xml version="1.0" encoding="UTF-8"?>
<c:BroadsoftDocument protocol="OCI" xmlns:c="C">
<sessionId>000000001</sessionId>
<command>
<userId>admin</userId></command>
</c:BroadsoftDocument>

Это, конечно, недопустимо - xsi: type элемента «command» удаляется при запуске кода под Tomcat.

Есть ли у кого-нибудь какие-либо предположения о том, что я могу делать неправильно, что могло бы вызвать проблемы такого типа только при работе под Axis2? Сначала я думал, что это проблема Tomcat, но после создания универсального сервлета и запуска точно такого же кода у меня не возникло никаких проблем. Я пытался поиграть с XMLOptions для XMLBeans, но не смог решить проблему. Варианты, которые я сейчас использую:

xmlOptions = new XmlOptions();
xmlOptions.setCharacterEncoding("UTF-8");
xmlOptions.setUseDefaultNamespace();
xmlOptions.setSaveAggressiveNamespaces();
xmlOptions.setSavePrettyPrint();

1 Ответ

0 голосов
/ 26 февраля 2010

Оказывается, проблема связана с порядком загрузчика классов, который использует Axis2. Это было исправлено, и функциональность описана здесь:

http://marc2.theaimsgroup.com/?l=axis-cvs&m=115946726426905&w=3

Короче говоря, для решения этой проблемы вам нужно отредактировать файл "services.xml" для вашего проекта Axis2 и добавить:

<parameter name="ServiceTCCL">composite</parameter>
...