2017-09-06 51 views
5

Chúng tôi có một kịch bản trong đó chúng tôi cần truy xuất thông tin mô tả cho các phiên bản EC2 chạy trên AWS. Để thực hiện điều này, chúng tôi đang sử dụng SDK Java AWS. Trong 90% trường hợp sử dụng của chúng tôi, lớp học com.amazonaws.services.ec2.model.Instance chính xác là những gì chúng tôi cần. Tuy nhiên, cũng có một trường hợp sử dụng nhỏ, trong đó sẽ có ích khi lấy XML thô mô tả cá thể. Tức là, dữ liệu XML trước khi nó được chuyển đổi thành đối tượng Instance. Có cách nào để nhận được cả hai đối tượng Instance đối tượng chuỗi XML bằng cách sử dụng SDK Java AWS không? Có cách nào để chuyển đổi thủ công từ cái này sang cái khác không? Hoặc, chúng ta có bị buộc thực hiện một cuộc gọi riêng biệt bằng cách sử dụng HttpClient hoặc một cái gì đó tương tự để lấy dữ liệu XML không?Nhận Mô tả XML của EC2 Instance bằng cách sử dụng SDK Java AWS?

Trả lời

2

Nếu bạn có xml (ví dụ: sử dụng API phần còn lại AWS trực tiếp), thì bạn có thể sử dụng các lớp com.amazonaws.services.ec2.model.transform.* để chuyển đổi xml thành đối tượng java. Thật không may, nó chỉ cung cấp các lớp học cần thiết cho bản thân SDK. Vì vậy, bạn, ví dụ, có thể chuyển đổi XML thô thành một Instance bằng cách sử dụng InstanceStaxUnmarshaller, nhưng không thể chuyển đổi Instance thành XML trừ khi bạn viết trình chuyển đổi đó.

Dưới đây là một ví dụ làm thế nào để phân tích cú pháp XML Instance:

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()); 

Bạn có lẽ có thể cố gắng để ngăn chặn phản ứng AWS liệu, vì vậy bạn có thể giữ XML thô trong khi vẫn sử dụng SDK hầu hết thời gian. Nhưng tôi sẽ không gọi điều đó dễ dàng vì nó sẽ đòi hỏi khá nhiều mã hóa.

+0

Đó chính xác là những gì tôi đang tìm kiếm! Cảm ơn!! – Shadowman

1

Bạn có thể sử dụng JAXB. Nguyên so sánh như sau. JAXB (Kiến trúc Java cho XML Binding) có thể chuyển đổi đối tượng Java thành/từ tệp XML.

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

Bạn có thể sử dụng API phần còn lại AWS để thay thế Java SDK. Tiền thưởng sẽ có hiệu suất nhỏ vì bạn sẽ không gửi dữ liệu thống kê tới Amazon như SDK.

+0

Có cách nào để sử dụng Java AWS SDK và marshal XML từ REST API để các đối tượng Java? Có những trường hợp mà các đối tượng Java sẽ thuận tiện hơn nhiều để làm việc với, nhưng một vài trường hợp sử dụng mà XML sẽ tốt hơn. – Shadowman

2

Thực hiện một EC2Client bằng cách thêm xử lý yêu cầu và ghi đè lên các phương pháp beforeUnmarshalling() như dưới đây

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(): 
Các vấn đề liên quan