如何在使用MS/. net /时在Java/JAXB/CXF端生成业务pojo.asmx网络服务



我们有几个基于MS的web服务,可见为。asmx?内网的WSDL链接。当这个web服务与最新的Visual Studio一起使用时没有问题。所有业务对象都有意义。我怀疑微软在使用servicerreference时使用了一些秘密握手,并依赖于一些专有知识,即在元素类型为<s:schema>

之后实际的CSharp类型是什么。

但是我们部门需要使用所有Java。我选择的框架是CXF (v.2.4.2),它可以很好地与Eclipse、SOAP-UI、Tomcat一起工作。还有互操作性方面的问题。首先,每个wsdl都必须手工修改。都是<s:schema> <s:any> are replaced with single <s:any>。在此之后CXF可以完成生成客户端Java。但是Java对象不是业务类型的pojo。它们是某种DOM元素,比如

/**
 * <p>Java class for anonymous complex type.
 * 
 * <p>The following schema fragment specifies the expected content contained within this class.
 * 
 * <pre>
 * &lt;complexType>
 *   &lt;complexContent>
 *     &lt;restriction base="{http://www.w3.org/2001/XMLSchema}anyType">
 *       &lt;sequence>
 *         &lt;any/>
 *       &lt;/sequence>
 *     &lt;/restriction>
 *   &lt;/complexContent>
 * &lt;/complexType>
 * </pre>
 * 
 * 
 */
@XmlAccessorType(XmlAccessType.FIELD)
@XmlType(name = "", propOrder = {
    "any"
})
public static class GetDepartmentsResult {
    @XmlAnyElement(lax = true)
    protected Object any;
    /**
     * Gets the value of the any property.
     * 
     * @return
     *     possible object is
     *     {@link Object }
     *     
     */
    public Object getAny() {
        return any;
    }
    /**
     * Sets the value of the any property.
     * 
     * @param value
     *     allowed object is
     *     {@link Object }
     *     
     */
    public void setAny(Object value) {
        this.any = value;
    }
}

当代码在运行时测试时,一切正常。但是每个对象都必须被视为DOM元素。我确信我在删除<s:schema>或使用wsld2java时犯了一个错误,所以它失去了语义。但是我应该在CXF中做些什么,才能使Java类看起来像CSharp类一样干净呢?

谢谢。

编辑:在http://msdn.microsoft.com/en-us/magazine/cc188755.aspx得到了一些线索,我希望这个链接将在以后的时间有效,当有人搜索相同的答案。查找文章的其他方法是:

MSDN杂志>问题> 2003>四月> XML文件:Web服务和数据集

答案:不可能

经过详尽的研究,很明显,当服务端没有Business CSharp对象时,Business pojo是不可能在客户端上重构的。那么简单。

在我的特殊情况下:

  • CXF 2.4.2 wsdl2java消费ASMX ASP。. NET将返回s:schema error: FAIL
  • 使用CXF 2.4.2的SOAPUI会因为同样的原因失败
  • Oracle Sun Metro Glassfish 3.1导入使用ASMX ASP。. NET将需要模式的本地副本:PASS(但需要WSDL的本地副本,但仍然没有业务对象)

在未来,最好的场景是:

  • Oracle Sun WSIT Tango使用Microsoft WCF服务,通过额外的"秘密握手"在消费期和运行期传递一些元信息。

相关内容

  • 没有找到相关文章

最新更新