Especifications: - 服务器:Weblogic 9.2 由客户修复。- 由客户修复的 wsdl 和 xsd 文件定义的 Web 服务;不允许修改。
你好,
在项目中我们需要开发一个邮件系统。这必须与 web 服务共同工作。我们创建一个 Bean,它从非根 xsd 元素(不是 wsdl)接收自动生成的类;这个 bean 做这个共同的工作。邮件系统收到一个包含在 xsd 文件中定义的元素的 xml,我们需要将此元素信息放到 wsdlc 生成的类中。有了这个对象,我们就可以使用这个通用 bean。无法将邮件请求重定向到 Web 服务。
我们一直在寻找使用 WL9.2 资源执行此操作的代码,但没有找到任何东西。目前,我们尝试使用 JAXB 进行这种解组:
JAXBContext c = JAXBContext.newInstance(new Class[]{WasteDCSType.class});
Unmarshaller u = c.createUnmarshaller();
WasteDCSType w = u.unmarshal(waste, WasteDCSType.class).getValue();
废物变量是一个 DOM 元素对象。它不是根元素,因为根不包含在 XSD 中
首先,我们需要在一些自动生成的类中添加无参数构造函数。没问题,我们解决了这个问题,最后我们解组了没有错误异常的 xml。但是我们在属性方面遇到了问题。解组没有设置属性;它们都不是任何类,不是简单的属性,不是大的或短的枚举属性。任何类型的 xml 元素都没有问题。
我们无法从“上下文字符串”(包名)创建解组器,因为 wsldc 没有创建 ObjectFactory。如果我们设置模式,则不会建立元素描述并且解组崩溃。
这是构建内容:
<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 如何使用 JAX-RPC 技术“解组”xml,我们可以对 xsd 元素做同样的事情吗?
- 如果是,我们该怎么做?
- 如果没有,这个问题是否存在任何不复杂的解决方案?
- 如果不是,我们必须使用 XMLBean 技术。还是使用 JAXB 技术重新生成 XSD。什么是最好的解决方案?
注意:实际上不是一个单一的 xsd,而是一个复杂的 xsd 结构。