Weblogic Web服务不会解组基本元素

时间:2014-04-09 22:13:34

标签: java web-services xsd wsdl weblogic

我在绑定中...得到它?是的,已经四天了,所以即使我不笑。

我在xsd中使用继承,下面显示了类型的定义。

我有一个web服务,它具有类似于wsdl的类型部分中定义的复杂类型。

<xsd:import namespace="http://xmlns.mycomp.com/base" schemaLocation="base-data-types.xsd"/>

<xsd:element name="enterStateElement">
    <xsd:complexType>
        <xsd:complexContent>
            <xsd:extension base="base:BaseContextRequestType">
              <xsd:sequence>
                <xsd:element name="instatecode" nillable="true" type="string"/>
              </xsd:sequence>
            </xsd:extension>
        </xsd:complexContent>
    </xsd:complexType>
  </xsd:element>

base:BaseContextRequestType在base-data-types.xsd中定义如下

<?xml version="1.0" encoding="utf-8"?>
<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema"
        xmlns="http://xmlns.mycomp.com/base"
        xmlns:jaxb="http://java.sun.com/xml/ns/jaxb"
        jaxb:version="2.1"
        targetNamespace="http://xmlns.mycomp.com/base"
        elementFormDefault="qualified">

<xsd:complexType name="BaseContextRequestType">
    <xsd:annotation>
        <xsd:appinfo>
            <jaxb:class 
                implClass="com.mycomp.xmlns.BaseContextRequestType"
                ref="com.mycomp.xmlns.BaseContextRequestType" >
            </jaxb:class>
        </xsd:appinfo>
    </xsd:annotation>
    <xsd:sequence>
        <xsd:element name="processInstanceId" type="xsd:string" minOccurs="1"/>
    </xsd:sequence>
</xsd:complexType>

BaseContextRequestType java类看起来像

@XmlAccessorType(XmlAccessType.FIELD)
@XmlType(name = "BaseContextRequestType",
     namespace="http://xmlns.mycomp.com/base",
     propOrder = {
"processInstanceId"
})
public class BaseContextRequestType {

@XmlElement(required = true, nillable=true, namespace="http://xmlns.mycomp.com/base")
public String processInstanceId;

@XmlElement(required = true, nillable=true, namespace="http://xmlns.mycomp.com/base")
public String getProcessInstanceId() {
    return processInstanceId;
}

public void setProcessInstanceId(String value) {
    this.processInstanceId = value;
}

}

并且EnterElementState java类像这样扩展

public class EnterStateElement extends com.mycomp.xmlns.BaseContextRequestType {

以下是通过网络发送的soap消息片段。

 <env:Body>
  <enterStateElement xmlns:tns="http://ymqctds/" xmlns="http://ymqctds/">
     <base:processInstanceId xmlns:base="http://xmlns.mycomp.com/base">iamtheprocessid</base:processInstanceId>
     <tns:instatecode>R</tns:instatecode>
  </enterStateElement>

不幸的是,在unmarshall中,processInstanceId字段永远不会在BaseContextRequestType基类上设置?

对于weblogic,必须有这样的例子,有没有人有任何想法?

谢谢, 标记

1 个答案:

答案 0 :(得分:0)

我认为这个问题是因为您使用&#34; @ XmlElement&#34;对字段和属性进行了注释。自&#34; XmlAccessorType&#34;设置为&#34; FIELD&#34;,您需要删除&#34; @ XmlElement&#34;来自属性的注释(getter方法)。