我想解析由jersey生成的.wadl文件。但我不知道泽西如何生成wadl文件,并且是否有泽西使用的方案文件。实际上,我想找到scheme文件并使用xmlBeans来解析wadl文件。我想知道有没有其他方法可以做到这一点。我将不胜感激!
答案 0 :(得分:0)
最简单的方法是查看resource class that generated the wadl response。您将看到model class it uses as the representation,com.sun.research.ws.wadl.Application
,这是一个JAXB生成的类。如果查看containing package,您将看到构成完整wadl模型的所有其他模型类。
因为这些是JAXB类,所以您可以使用JAXB来解析使用Application
类作为根模型类型的响应。
如果您使用的是Jersey客户端,则可以直接从Response
Response response = target("application.wadl").request("application/xml").get();
Application wadlApp = response.readEntity(Application.class);
String
或者,如果您通过其他方式获得InputStream
或String wadlString = ...
JAXBContext context = JAXBContext.newInstance(Application.class);
Unmarshaller unmarshaller = context.createUnmarshaller();
Application wadlApp = (Application)unmarshaller.unmarshal(new StringReader(wadlString));
,则可以直接使用JAXB进行解组
jersey-server
这种方法的问题是类包含在jersey-server
工件中。对于你正在做的事情,你可能不希望这个负载。
您也可以尝试使用xjc自己生成JAXB类,使用wadl.xsd Jersey使用。如果不是Jersey使用的相同模型类,我会想象你会变得相似。这样您就不需要依赖// maven directory structure (src/main/java)
xjc -d src/main/java -p com.stackoverflow.jersey.wadl.test wadl.xsd
。
所以我只是使用xjc测试生成JAXB类,使用上面的wadl.xml,它可以工作。它产生与Jersey
相同的类{{1}}
然后,您可以使用上面的JAXB示例来解组使用生成的类。