如何在 jax-ws 网络服务中解组 xml 文件
Posted
技术标签:
【中文标题】如何在 jax-ws 网络服务中解组 xml 文件【英文标题】:How to unmarshall xml file in a jax-ws webservice 【发布时间】:2013-05-22 09:15:28 【问题描述】:我试图解组一个使用 jaxb 的 xml 文件,它是 netbeans 中 web 服务方法中的一个 xml 文件。
结果是解组永远不会完成。我在某个地方读到肥皂信封是在 jaxb 操作之前形成的。我是这个的新手。
如果有人能简单地解释如何从 jax ws 肥皂消息上的 xml 文件中获取 xml 数据。
这是我的网络服务方法代码:
@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>
【问题讨论】:
你想做什么?在 Web 服务响应中发送文件内容/作为 Web 服务请求参数? 是的,将xml文件的内容作为参数传递给webservice方法。 您是否生成了解组所需的所有类(例如来自 XSD Schema)? 是的,我使用 jax 绑定来生成所有类,如果我在 java 类中进行测试,我会得到正确的结果,但如果我在 Web 服务中测试它会返回 null 【参考方案1】:我想在这种情况下最简单的方法是将文件内容作为字符串参数传递给 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。从webservice层来看,文件内容只是一些 要传输的数据,将这些东西分开处理会更简单。
【讨论】:
感谢您的回复,我要做的是在 jax Ws Web 服务方法中使用 jaxb 解组 xml 文件..以上是关于如何在 jax-ws 网络服务中解组 xml 文件的主要内容,如果未能解决你的问题,请参考以下文章
如何使用 spring 集成 dsl 从 JMS 队列中解组 XML
在 java-8“安全处理 org.xml.sax.SAXNotRecognizedException 导致 java.lang.IllegalStateException”中解组 xml 时出错