Tôi tạo ra một dịch vụ web sử dụng:ADBException: bất ngờ subelement
- Apache Axis 2 codegen Hướng dẫn v.1.6.2 (Binding: ADB)
- Eclipse Juno
- Tomcat 7
- Java 6
Dịch vụ trả về đối tượng Java tùy chỉnh (DataBean) trở lại máy khách, nhưng tôi tình cờ gặp một ngoại lệ trong mã máy khách:
org.apache.axis2.AxisFault: org.apache.axis2.databinding.ADBException: Unexpected subelement {schemaTargetNs}message
Từ những gì tôi đã nghiên cứu, qua n lần nữa ... Tôi nghĩ đây là một vấn đề rất phổ biến nhưng chưa có câu trả lời kết luận về những gì cần phải làm để khắc phục.
Một số bài đăng trên diễn đàn này và các diễn đàn khác cho biết rằng WSDL cần phải được sửa đổi (một số không gian tên) hoặc danh sách khách hàng cần sửa đổi. Một số thậm chí còn nói rằng có một lỗi trong ADB. Nó chắc chắn là một lỗi trong các phiên bản trước của Axis nhưng có nhiều bài viết trong kho lưu trữ thư nói rằng lỗi đã được sửa. Các lưu trữ gửi thư này liên quan đến các phiên bản trước của Axis2.
Bây giờ câu hỏi của tôi là:
- Là nó vẫn còn một lỗi?
- Chính xác những gì cần phải được thay đổi trong WSDL hoặc Sơ khai khách hàng?
Điều đáng nói là tôi đã tạo một dịch vụ web tương tự trả về "Chuỗi" cho khách hàng. Nó hoạt động tốt ! Vì vậy, nó không thành công khi một kiểu dữ liệu phức tạp có liên quan.
Có một số thông tin về Apache's website, dưới tiêu đề "Known Hạn chế" ...
Nó đọc: "ADB được hiểu là một khuôn khổ liên kết dữ liệu 'đơn giản' và không có nghĩa là để biên dịch tất cả loại lược đồ. những hạn chế sau đây được nêu bật nhất.
- loại Extensions và hạn chế Complex ".
Đó có phải là sự cố không?
Sau đây là đoạn từ tập tin WSDL mà có thể là của một số quan tâm đến bạn ...
<wsdl:types>
<xs:schema xmlns:ax26="http://mywebservice/xsd" attributeFormDefault="qualified" elementFormDefault="qualified" targetNamespace="schemaTargetNs">
<xs:import namespace="http://mywebservice/xsd"/>
<xs:element name="getMsg">
<xs:complexType>
<xs:sequence>
<xs:element minOccurs="0" name="reqData" nillable="true" type="ax25:DataBean"/>
</xs:sequence>
</xs:complexType>
</xs:element>
<xs:element name="getMsgResponse">
<xs:complexType>
<xs:sequence>
<xs:element minOccurs="0" name="return" nillable="true" type="ax25:DataBean"/>
</xs:sequence>
</xs:complexType>
</xs:element>
</xs:schema>
<xs:schema attributeFormDefault="qualified" elementFormDefault="qualified" targetNamespace="http://mywebservice/xsd">
<xs:complexType name="DataBean">
<xs:sequence>
<xs:element minOccurs="0" name="message" nillable="true" type="xs:string"/>
<xs:element minOccurs="0" name="name" nillable="true" type="xs:string"/>
</xs:sequence>
</xs:complexType>
</xs:schema>
</wsdl:types>
Bây giờ làm thế nào để khắc phục vấn đề này? Tôi có nên bao gồm một số đoạn mã khác ở đây không?
Lỗi này chắc chắn là trong phản hồi từ máy chủ, nhưng làm thế nào để tìm ra yếu tố nào được mong đợi? Trừ khi tôi biết điều đó, tôi sẽ không thể sửa chữa mọi thứ. Tôi có phản hồi XML từ máy chủ và nó có vẻ tốt với tôi. –
Vâng, nếu bạn chạy ứng dụng khách trong trình gỡ lỗi và/hoặc nếu bạn có stacktrace cho org.apache.axis2.AxisFault, thì bạn có thể tìm thấy dòng mã cụ thể trong trình phân tích cú pháp thư đang ném lỗi . Nó sẽ được rõ ràng vào thời điểm đó những gì yếu tố nó được mong đợi. – Kenster
Điều này có lẽ sẽ đi xuống đến thực tế là khách hàng đã được tạo ra dựa trên một bản sao không chính xác của WSDL. Vì vậy, phản hồi được gửi bởi máy chủ không khớp với những gì khách hàng mong đợi. – Kenster