簡體   English   中英

在Web Service(Soap)Netbeans中與JaxB一起解組

[英]Unmarshall with JaxB in a Web Service (Soap) Netbeans

我真的在Netbeans上與JaxB和JaxWs斗爭。 如果我解組了普通Java Web應用程序上使用的Java類,則得到打印的xml文件的結果。 如果我然后在soap webservice方法中使用相同的解組代碼,並進行web服務測試,則始終返回null值。

如何在NetBeans上的網絡服務方法中解組xml文件?

這是我的webservice方法代碼部分:

   @WebMethod(operationName = "getData")
public String getData() {

    try {
        //List<String> listing = new ArrayList();
        StringBuilder str =  new StringBuilder();
        FlightList flights = new FlightList();
        javax.xml.bind.JAXBContext jaxbCtx = javax.xml.bind.JAXBContext.newInstance(flights.getClass().getPackage().getName());
        javax.xml.bind.Unmarshaller unmarshaller = jaxbCtx.createUnmarshaller();
        flights = (FlightList) unmarshaller.unmarshal(new java.io.File("flights.xml")); //NOI18N
        for (Flight f : flights.getAvailableFlight()) {
                  str.append(f.getDestinationCity());


        }
        String myString =  str.toString();
        return myString;
    } catch (javax.xml.bind.JAXBException ex) {
        // XXXTODO Handle exception
        System.out.println("Error occured" + ex);
    }

    return null;
}

這是我的模式示例

<xsd:complexType name="Flight">
    <xsd:sequence>
        <xsd:element name="aircraftVendor" type="xsd:string"></xsd:element>
        <xsd:element name="aircraftCode" type="xsd:string"></xsd:element>   
        <xsd:element name="aircraftType" type="xsd:string"></xsd:element>
        <xsd:element name="fare" type="tns:Fare"/>
 </xsd:sequence>

<xsd:element name="FlightList">
    <xsd:complexType>
        <xsd:sequence >
            <xsd:element name="availableFlight" type="tns:Flight" minOccurs="0"    maxOccurs="unbounded"/>
        </xsd:sequence>
    </xsd:complexType>
</xsd:element>

<xsd:complexType name="Fare">
    <xsd:attribute name="amount" type="tns:Value" use="required"/>
</xsd:complexType>

此刻的指導,不勝感激。

我建議您返回myString而不是null作為最后一行代碼,而不是在try catch塊內。

有幾件事可能是問題所在:

問題區域1-使用java.io.File

您不確定在部署應用程序時工作目錄將在哪里。 而不是將XML作為文件加載:

flights = (FlightList) unmarshaller.unmarshal(new java.io.File("flights.xml"))

ClassLoader加載它。

InputStream xml = FlightList.class.getClassLoader().getResourceAsStream("flights.xml");
FlightList flightList = (FlightList) unmarshaller.unmarshal(xml);
xml.close();

問題區域2- JAXBContext可能不了解正確的ClassLoader

確保在包名稱上創建JAXBContext時傳遞ClassLoader 您還需要確保該軟件包包含jaxb.index文件或ObjectFactory類。

JAXBContext.newInstance(FlightList.class.getPackage().getName(), FlightList.class.getClassLoader());

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM