Especifications:
- Сервер: Weblogic 9.2 исправлен заказчиком.
- веб-сервисы, определенные в файлах wsdl и xsd, исправленных клиентом; не допускаются изменения.
Привет
В проекте нам нужно разработать почтовую систему. Это должно сделать общую работу с веб-сервисом. Мы создаем Бин, который получает автоматически сгенерированный класс из некорневого элемента xsd (не wsdl); этот боб делает эту общую работу. Почтовая система получает xml с элементами, определенными в файле xsd, и нам нужно перенести эту информацию об элементах в сгенерированные wsdlc классы. С этими объектами мы можем использовать этот общий боб. Не удается перенаправить почтовый запрос на веб-сервис.
Мы ищем код для этого с ресурсами WL9.2, но ничего не нашли. На данный момент мы попытались использовать JAXB для этого демаршаллинга:
JAXBContext c = JAXBContext.newInstance(new Class[]{WasteDCSType.class});
Unmarshaller u = c.createUnmarshaller();
WasteDCSType w = u.unmarshal(waste, WasteDCSType.class).getValue();
Переменная отходов - это объект DOM Element. Это не корневой элемент, потому что корень не включен в XSD
Сначала нам нужно было добавить конструктор без аргументов в некоторые автоматически сгенерированные классы. Нет проблем, мы решили это и, наконец, мы расшифровали XML без исключений ошибки. Но у нас были проблемы с атрибутами. Unmarshalling не установить атрибуты; ни один из них ни в каком классе, ни простые атрибуты, ни большие или короткие атрибуты перечисления. Нет проблем с элементами XML любого типа.
Мы не можем создать демаршаллер из "строки контекста" (имя пакета), потому что объектная фабрика не была создана wsldc Если мы установим схему, описания элементов не будут найдены и произойдет аварийный сбой.
Это содержимое сборки:
<taskdef name="jwsc" classname="weblogic.wsee.tools.anttasks.JwscTask" />
<taskdef name="wsdlc" classname="weblogic.wsee.tools.anttasks.WsdlcTask"/>
<target name="generate-from-wsdl">
<wsdlc
srcWsdl="${src.dir}/wsdls/e3s-environmentalMasterData.wsdl"
destJwsDir="${src.dir}/webservices"
destImplDir="${src.dir}/webservices"
packageName="org.arc.eterws.generated"
/>
<wsdlc
srcWsdl="${src.dir}/wsdls/e3s-waste.wsdl"
destJwsDir="${src.dir}/webservices"
destImplDir="${src.dir}/webservices"
packageName="org.arc.eterws.generated"
/>
</target>
<target name="webservices" description="">
<jwsc srcdir="${src.dir}/webservices" destdir="${dest.dir}" classpathref="wspath">
<module contextPath="E3S" name="webservices">
<jws file="org/arc/eterws/impl/IE3SEnvironmentalMasterDataImpl.java"
compiledWsdl="${src.dir}/webservices/e3s-environmentalMasterData_wsdl.jar"/>
<jws file="org/arc/eterws/impl/Ie3SWasteImpl.java"
compiledWsdl="${src.dir}/webservices/e3s-waste_wsdl.jar"/>
<descriptor file="${src.dir}/webservices/META-INF/web.xml"/>
</module>
</jwsc>
</target>
Мои вопросы:
- Как Weblogic "unmarshall" XML
с технологией JAX-RPC и можем ли мы сделать
то же самое с элементом xsd?
- Как мы можем это сделать, если да?
- Если нет, существует любой не сложный
решение этой проблемы?
- Если нет, мы должны использовать технологию XMLBean. или же
восстановить XSD с технологией JAXB.
Какое лучшее решение?
ПРИМЕЧАНИЕ. На самом деле существует не одна единица xsd, а сложная структура xsd.