我试图在netbeans中的webservice方法中使用jaxb解组一个xml文件。
结果是解组永远不会完成。我在某个地方读到肥皂信封是在jaxb行动之前形成的。我是这个的新手。
如果有人能解释如何从jax ws soap消息中的xml文件中获取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>
答案 0 :(得分:0)
我想在这种情况下最简单的方法是将文件内容作为字符串参数传递给Web服务方法,然后在该方法实现中解组字符串。
因此,Web服务将是这样的:
@WebService(endpointInterface = "org.foo.SomeEndpoint")
public class SomServiceImpl implements SomeService{
@Override
public void uploadFile(String fileName, String fileContent) {
// unmarshall fileContent into a file called fileName and do whatever you need
}
}
How to unmarshall an XML file from string.
您不应混淆与Web服务消息相关的XML和文件中的XML。从Web服务层的角度来看,文件内容只是一些 要转移的数据,将这些事物视为单独处理更为简单。