Currently I\'m using XSD for SOAP XML, but when I run my SOAP XML and XSD on FREEFORMATTER.COM, I get this error:
Cvc-elt.1: Cannot Find The Declarati
First, you must add a targetNamespace="http://tempuri.org/"
to the xs:schema
element of your XSD in order for your XSD to apply to the namespace used in your XML payload.
Then you can take either of the following approaches: Change the XML or Change the XSD. Choose according to which files you control.
Add
xsi:schemaLocation="http://tempuri.org/ tempuri.xsd
http://schemas.xmlsoap.org/soap/envelope/
http://schemas.xmlsoap.org/soap/envelope/
to the soap:Envelope
:
<?xml version="1.0" encoding="utf-8"?>
<soap:Envelope xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:xsd="http://www.w3.org/2001/XMLSchema"
xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/"
xsi:schemaLocation="http://tempuri.org/ tempuri.xsd
http://schemas.xmlsoap.org/soap/envelope/
http://schemas.xmlsoap.org/soap/envelope/">
<soap:Body>
<Cancel_OrderLine xmlns="http://tempuri.org/">
<Data>
<Delivery>
<Delivery_No>1605000194</Delivery_No>
<Reason>qwertyu</Reason>
</Delivery>
<Delivery>
<Delivery_No>1605000194</Delivery_No>
<Reason>qwerty</Reason>
</Delivery>
</Data>
</Cancel_OrderLine>
</soap:Body>
</soap:Envelope>
Add
<xs:import namespace="http://schemas.xmlsoap.org/soap/envelope/"
schemaLocation="http://schemas.xmlsoap.org/soap/envelope/"/>
to the xs:schema
element of your XSD:
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/"
targetNamespace="http://tempuri.org/">
<xs:import namespace="http://schemas.xmlsoap.org/soap/envelope/"
schemaLocation="http://schemas.xmlsoap.org/soap/envelope/"/>
<xs:element name="Cancel_OrderLineReq">
<xs:complexType>
<xs:sequence>
<xs:element name="Data">
<xs:complexType>
<xs:sequence>
<xs:element name="Delivery" maxOccurs="unbounded" minOccurs="0">
<xs:complexType>
<xs:sequence>
<xs:element type="xs:int" name="Delivery_No"/>
<xs:element type="xs:string" name="Reason"/>
</xs:sequence>
</xs:complexType>
</xs:element>
</xs:sequence>
</xs:complexType>
</xs:element>
</xs:sequence>
</xs:complexType>
</xs:element>
</xs:schema>
Both methods will allow successful validation of your SOAP envelop and its payload.
Perhaps if you validate the xml against xsd, you need to initialize the builderFactory to be "aware of namespaces" - it is false by default.
final DocumentBuilderFactory builderFactory = DocumentBuilderFactory.newInstance();
builderFactory.setNamespaceAware(true);
final DocumentBuilder builder = builderFactory.newDocumentBuilder();
builder.parse(...);