Tôi đang sử dụng Dịch vụ web của bên thứ ba có định nghĩa và triển khai nằm ngoài tầm kiểm soát của tôi. Dịch vụ web này sẽ thay đổi trong tương lai.Tự động trích xuất XSD nội tuyến từ WSDL sang tệp XSD (s)
Dịch vụ web nên được sử dụng để tạo tệp XML chứa một số dữ liệu giống nhau (được biểu thị bằng cùng loại XSD) làm Dịch vụ web cộng với một số thông tin bổ sung do chương trình tạo.
cách tiếp cận của tôi:
- tạo XSD của riêng tôi đề cập đến các định nghĩa XSD của WSDL của dịch vụ web được gọi là
- sử dụng Java (XSD này cũng bao gồm các loại XSD cho các thông tin thêm rõ ràng.) Khung dữ liệu XML (như ADB hoặc JiXB) để tạo các lớp databinding từ tệp XSD của riêng tôi từ bước 1
- sử dụng khung công tác SOAP Java (như Axis2 hoặc CXF) với cùng khung dữ liệu để tạo các lớp databinding từ WSDL (Điều này sẽ cho phép tôi sử dụng các đối tượng được truy xuất bởi dịch vụ web trực tiếp trong generati trên XML.)
Loại XSD tôi sẽ sử dụng trong tệp XSD của riêng tôi, nhưng được xác định trong WSDL, có thể thay đổi. Bất cứ khi nào họ thay đổi, tôi muốn tự động xử lý dữ liệu XSD và WSDL một lần nữa. (Nếu thay đổi là đủ quan trọng, điều này có thể gây ra một số nỗ lực phát triển (Nhưng thường không)..)
Vấn đề của tôi:
Trong bước 1 Tôi cần một XSD đề cập đến các loại tương tự như sử dụng bởi các Web Dịch vụ.
WSDL đang đề cập đến một WSDL khác, đang đề cập đến một WSDL khác vv. Cuối cùng có một WSDL với các loại XSD nội tuyến cần thiết. Theo như tôi biết không có cách nào để trực tiếp tham khảo các loại XSD nội tuyến của một WSDL từ một XSD.
Cách tiếp cận mà tôi nghĩ là khả thi nhất, là bao gồm thêm một bước trong quá trình xử lý tự động (trước khi dữ liệu) trích xuất XSD nội tuyến từ WSDL sang tệp XSD khác. Các tệp XSD khác sau đó có thể được tham chiếu bởi tệp XSD của riêng tôi.
Những điều tôi muốn tránh:
- thủ sao chép dán XSD inline vào một tập tin XSD
- Bất kỳ bước thủ công (Giống như việc xác định (Tôi đang tìm kiếm một quá trình tự động.). WSDL chứa các loại nội tuyến theo cách thủ công. (Vị trí của WSDL đó cũng thay đổi.))
- Sử dụng xsd: bất kỳ trong XSD của riêng tôi. Tôi muốn tập tin XSD của riêng tôi là chính xác.
- Sử dụng một công nghệ không phải Java (như NET)
- một lượng lớn thực hiện (nhưng gợi ý về cách bạn sẽ thực hiện một khai thác như thế nào được hoan nghênh)
PS: Tôi tìm thấy một số câu hỏi tương tự, nhưng tất cả họ đều có phản ứng như: WTH bạn có muốn làm điều đó không? Đó là lý do cho câu chuyện nền tảng khá lớn của tôi.
Tôi đã đoán rằng điều gì đó như thế này là cần thiết. Tôi đã thực sự hy vọng cho một cái gì đó thêm khuôn khổ như: ** cho (XmlSchema xmlSchema: wsdl.extractNamespaceSchemas()) xmlSchema.writeFile (ns2FileName (xmlSchema.getTargetNamespace())); ** Aah, một thế giới không hoàn hảo ... –
@Steven : âm thanh như một cơ hội cho một dự án nguồn mở để mang thế giới đến gần hơn một chút để hoàn thiện ;-) –