ฉันกำลังใช้บริการเว็บของผู้ขาย สร้างคลาสโดยใช้ JDK6 wsimport สำหรับผู้จำหน่าย WSDL ตอนนี้ฉันกำลังพยายามเรียกใช้บริการเว็บโดยใช้คลาสไคลเอนต์ Java แบบธรรมดาและรับข้อยกเว้นนี้พร้อมการตอบกลับ
แท็ก XML ที่ไม่คาดคิด คาดหวัง: {http://www.abcd.com/addressValidation/}validateAddressResponse แต่พบ: {} ตรวจสอบ AddressResponse
ผู้ขายบอกว่าลองใช้คลาสที่สร้างโดย Apache Axis มันใช้งานได้ดี สิ่งที่ฉันสังเกตเห็นคือ JaxWS จะต่อท้าย/ผูกเนมสเปซกับแต่ละองค์ประกอบที่ร้องขอโดยอัตโนมัติ และคาดหวังเนมสเปซในองค์ประกอบตอบกลับด้วย
อินเทอร์เฟซที่สร้างขึ้นคือ
@WebService(name = "AddressStandardize", targetNamespace = "http://www.abcd.com/addressValidation/")
@XmlSeeAlso({
com.abcd.ObjectFactory.class
})
public interface AddressStandardize {
@WebMethod(action = "http://www.abcd.com/standardizeAddress")
@RequestWrapper(localName = "validateAddress", targetNamespace = "", className = "com.abcd.ValidateAddress")
@ResponseWrapper(localName = "validateAddressResponse", targetNamespace = "", className = "com.abcd.ValidateAddressResponse")
public void standardizeAddress(
...
...
...
);
}
ฉันเดาว่า Jax-WS จะเพิ่มเนมสเปซเป้าหมายนี้ให้กับทั้งองค์ประกอบ validateAddress และ validateAddressResponse
วิธีหลีกเลี่ยงการผูกเนมสเปซเป้าหมายเพื่อตรวจสอบองค์ประกอบ AddressResponse เพื่อที่จะไม่คาดหวังการตอบกลับ กรุณาช่วย!
Jax WS สร้างคำขอ:
<S:Envelope xmlns:S="http://schemas.xmlsoap.org/soap/envelope/">
<S:Header>
<ns2:id xmlns:ns2="http://www.abcd.com/addressValidation/">PSA</ns2:id>
</S:Header>
<S:Body>
<ns2:validateAddress xmlns:ns2="http://www.abcd.com/addressValidation/">
<arg1>
<addresslineone>126 corbin st</addresslineone>
<addresslinetwo/>
<addresslinethree/>
<city>jersey city</city>
<state>NJ</state>
<postalcode/>
<country/>
<isocountrycode>US</isocountrycode>
</arg1>
</ns2:validateAddress>
</S:Body>
</S:Envelope>
การตอบกลับ:
<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:xyz="http://www.abcd.com/xyz">
<soapenv:Header xmlns:soapenc="http://schemas.xmlsoap.org/soap/encoding/" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<xyz:id>PSA</xyz:id>
</soapenv:Header>
<soapenv:Body xmlns:soapenc="http://schemas.xmlsoap.org/soap/encoding/" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<validateAddressResponse xsi:noNamespaceSchemaLocation="addressValidation.xsd">
<validateAddressReturn>
...
...
...
</validateAddressReturn>
<ResponseStatus>
<StatusCode>SUCCESS</StatusCode>
</ResponseStatus>
</validateAddressResponse>
</soapenv:Body>
</soapenv:Envelope>
การตอบกลับนี้มาพร้อมกับข้อยกเว้นนี้... แท็ก XML ที่ไม่คาดคิด คาดหวัง: {http://www.abcd.com/addressValidation/}validateAddressResponse แต่พบ: {} ตรวจสอบ AddressResponse