1

JAX-WS を使用して Web サービスを呼び出しています。コンテンツを Java オブジェクトに変換したい。

以下は、Web サービス応答のコンテンツ部分です。

<header xmlns="">
  <store>
    <store_id>1</store_id>
    <store_name>ACME</store_name>
  </store>
</header>

次に、次のようにクラスを作成しました。

@XmlAccessorType(XmlAccessType.FIELD) 
@XmlType(name = "", propOrder = {
        "store_id",
        "store_name" }) 
@XmlRootElement(name = "store") 
static public class store { 
   @XmlElement(name = "store_id", required = true)
   protected String store_id;

   @XmlElement(name = "store_name", required = true)
   protected String store_name;
}

私のJAXBコード:

List result = service.getService1Soap12().getDivisions().getContent();
ElementNSImpl e =(ElementNSImpl)result.get(0);
JAXBContext context = JAXBContext.newInstance(store.class);
Unmarshaller um = context.createUnmarshaller();

JAXBElement element = (JAXBElement) um.unmarshal(e);
store customer = (store) element.getValue();

次のエラーが表示されます。

Exception in thread "main" javax.xml.bind.UnmarshalException: unexpected element (uri:"", local:"store"). Expected elements are <{http://tempuri.org/}header>

これを修正するために数え切れないほどのことを試しました。どんな助けでも素晴らしいでしょう!

4

2 に答える 2

1

のインスタンスで DOM 要素をラップしDOMSource、次のことを試してください。

DOMSource domSource = new DOMSource(e);
JAXBElement<store> element =
    unmarshaller.unmarshal(domSource, store.class);

非整列化先のクラスを指定することにより、JAXB impl はルート要素に基づいて非整列化クラスを決定する必要がなくなります。

于 2013-01-30T21:54:34.850 に答える
0

あなたのルート要素は、StackTrace の言うとおりではあり<header ...>ません。<store>

@XmlRootElement(name="header")注釈付きの属性であるため、注釈とStoreクラス (小さな "s" を持つ "store" ではなく)を持つ新しいクラス ヘッダーを作成してみてください(<- Store クラスで定義した@XmlElement(name="store")場合、XmlElement 注釈が本当に必要かどうかはわかりません)。@XmlRootElement

于 2013-03-29T20:22:52.203 に答える