繁体   English   中英

使用AWS Java SDK获取EC2实例XML描述?

[英]Get EC2 Instance XML Description using AWS Java SDK?

我们有一个场景,我们需要检索在AWS上运行的EC2实例的描述信息。 为此,我们使用AWS Java SDK。 在我们90%的用例中, com.amazonaws.services.ec2.model.Instance类正是我们所需要的。 但是,还有一个小用例,获取描述实例的原始XML将是有益的。 也就是说,之前的XML数据被转换为Instance对象。 有没有办法使用AWS Java SDK同时获取Instance对象 XML字符串? 有没有办法手动从一个转换到另一个? 或者,我们是否会被迫使用HttpClient或类似的东西进行单独的调用来获取XML数据?

通过添加请求处理程序创建EC2Client并覆盖beforeUnmarshalling()方法,如下所示

AmazonEC2ClientBuilder.standard().withRegion("us-east-1")
    .withRequestHandlers(
            new RequestHandler2() {
                  @Override
                    public HttpResponse beforeUnmarshalling(Request<?> request, HttpResponse httpResponse) {
                        // httpResponse.getContent() is the raw xml response from AWS
                        // you either save it to a file or to a XML document
                        return new HTTPResponse(...);
                        // if you consumed httpResponse.getContent(), you need to provide new HTTPResponse
                    }
                }
        ).build():

您可以使用JAXB .marshal,如下所示。 JAXB (用于XML绑定的Java体系结构)可以将Java对象转换为XML文件或从XML文件转换。

StringWriter sw = new StringWriter();
JAXB.marshal(instance, sw);
String xmlString = sw.toString();

如果你有xml(例如直接使用AWS rest API),那么你可以使用com.amazonaws.services.ec2.model.transform.*类将xml转换为java对象。 不幸的是,它只提供SDK本身所需的类。 例如,您可以使用InstanceStaxUnmarshaller将原始XML转换为实例,但除非您编写此类转换器,否则无法将实例转换为XML。

以下是如何解析实例XML的示例:

XMLEventReader eventReader = XMLInputFactory.newInstance().createXMLEventReader(new StringReader(instanceXml));
StaxUnmarshallerContext suc = new StaxUnmarshallerContext(eventReader, new TreeMap<>());
InstanceStaxUnmarshaller isu = new InstanceStaxUnmarshaller();
Instance i = isu.unmarshall(suc);
System.out.println(i.toString());

您可能可以尝试拦截原始AWS响应,以便您可以在大多数时间仍使用SDK的同时保留原始XML。 但我不会这么简单,因为它需要相当多的编码。

您可以使用AWS rest API替换Java SDK。 奖励将是轻微的性能提升,因为您不会像SDK那样向亚马逊发送统计数据。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM