2012-05-15 30 views
6

tôi nhận được lỗi khi kết nối với dịch vụ web của tôi:CXF: Lỗi không sửa lỗi: các yếu tố không mong muốn, {} có nghĩa là gì?

javax.xml.ws.soap.SOAPFaultException: Unmarshalling Error: unexpected element (uri:"", local:"OrderID"). Expected elements are <{}Login>,<{}CrewId>,<{}OrderID >,<{}OrderNumber >

Dịch vụ tiếp xúc sử dụng org.apache.cxf.transport.servlet.CXFServletjaxws:endpoint chú thích. Khách hàng được tạo bằng CXF. Thứ nhất, đáng ngạc nhiên đối với tôi là tôi đang sử dụng cùng một công nghệ trên cả hai đầu và giải pháp không hoạt động, thứ hai, điều bí ẩn này {} trong các thông báo lỗi.

Vì vậy, điều gì là sai và cách hiểu điều này {}?

Trả lời

10

Bạn đã chú ý khoảng cách giữa OrderID và '>'? Dự kiến ​​là <{}OrderID > và bạn gửi "OrderID". Kiểm tra xem bạn có không gian trong tên phần tử của bạn không.

+0

Vâng, bạn nói đúng, tôi chưa từng thêm ai đó vào đó. –

+0

+1 để tiết kiệm thời gian cho tôi, vì mẹo của bạn đã giúp tôi tìm lỗi đánh máy trong tên phần tử (không phải là không gian thừa, chỉ là một tên khác) dẫn đến thông báo lỗi không rõ ràng. – Withheld

+0

Câu trả lời đơn giản và thẳng thắn. Tôi đã đọc rất nhiều ý kiến ​​nhưng đây là ý kiến ​​hay nhất. – VJS

15

Have you noted space between OrderID and '>'? Expected is <{}OrderID > and you send >"OrderID". Check if you don't have spaces in your element names.

Trong khi câu trả lời trên từ Stepan Vihor đã giúp bạn có được những gì bạn cần, hãy để tôi trả lời câu hỏi của bạn về những gì các "{}" có nghĩa là:

Nó có nghĩa là JAX-B Unmarshaller được mong đợi của bạn Phần tử OrderID không có vùng tên, tức là không gian tên uri cho phần tử đó cần phải bằng "".

Xem ở đây cho một giới thiệu ngắn gọn về XML Namespaces

+0

Có, cảm ơn bạn đã giải thích này, nó rất hữu ích. –

-1

Đôi khi bạn phải chỉ rõ tên được sử dụng trong wsdl (case sensitive): < {Log}>, < {} CrewId>, < {} OrderID> , < {} ORDERNUMBER>

@XmlElement(name = "CrewId") 
protected String crewId; 
@XmlElement(name = "OrderID ") 
protected String orderID; 
@XmlElement(name = "Login") 
protected String login; 
@XmlElement(name = "OrderNumber") 
protected String orderNumber; 
2

@icyitscold, nhận xét tôi muốn thêm từ kinh nghiệm của tôi là mà bạn có thể thay đổi elementFormDefault để "đủ điều kiện" như elementFormDefault="qualified" trong thành phần xs:schema. Không gian tên sẽ được trình duyệt theo mặc định.

Đó là cho cách tiếp cận WSDL-đầu tiên, nếu bạn sử dụng phương pháp mã đầu tiên, bạn có thể xem xét thêm sự thay đổi như

@javax.xml.bind.annotation.XmlSchema( attributeFormDefault = javax.xml.bind.annotation.XmlNsForm.UNQUALIFIED, elementFormDefault = javax.xml.bind.annotation.XmlNsForm.QUALIFIED)

0

tôi đã cùng một lỗi,

javax.xml.ws.soap.SOAPFaultException: Unmarshalling Error: unexpected element (uri:"", local:"country"). Expected elements are <{}seconds>,<{}month>,<{}hour>,<{}year>,<{}minutes>,<{}day>

Sau đó, tôi tìm ở phía dịch vụ web, kiểu phản hồi đã thêm thuộc tính mới 'country'.

Để bỏ qua thuộc tính mới được thêm, hãy thêm thuộc tính sau vào cài đặt 'jaxws: client'.

<jaxws:client id="abc" 
       serviceClass="someClass" 
       address="url"> 
    <jaxws:properties> 
     <entry key="schema-validation-enabled" value="false"/> 
     <entry key="set-jaxb-validation-event-handler" value="false"/> 
    </jaxws:properties> 
</jaxws:client> 
Các vấn đề liên quan