WSDL 部分は次のとおりです。
<xs:complexType name="requestRow">
<xs:all>
<xs:element minOccurs="0" name="RoutingData" type="tns:RoutingData"/>
<xs:element minOccurs="0" name="user_fields">
<xs:complexType>
<xs:sequence>
<xs:element maxOccurs="unbounded" minOccurs="0" name="user_field" type="tns:user_field"/>
</xs:sequence>
</xs:complexType>
</xs:element>
</xs:all>
</xs:complexType>
<xs:complexType name="RoutingData">
<xs:sequence>
<xs:element minOccurs="0" name="RouteDataPoint" type="tns:RouteDataPoint"/>
<xs:element minOccurs="0" name="RoutingSegmentID" type="xs:string"/>
</xs:sequence>
</xs:complexType>
<xs:complexType name="RouteDataPoint">
<xs:sequence>
<xs:element name="Longitude" type="xs:double"/>
<xs:element name="Lattitude" type="xs:double"/>
</xs:sequence>
</xs:complexType>
その意図は、入力で RouteDataPoint または RoutingSegmentID のいずれかを許可することです。両方を許可することはできず、どちらも入力しない場合はエラーがスローされます。むしろ、上記のいずれも指定せずに次の入力を行うと、非整列化エラーが詳細なしで返されます。
入力:
<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:get="http://www.g1.com/services/GetRouteData">
<soapenv:Header/>
<soapenv:Body>
<get:GetRouteDataRequest>
<get:context>
<get:account.id>admin</get:account.id>
<!--Optional:-->
<get:account.password>admin</get:account.password>
</get:context>
<!--Optional:-->
<get:options>
<!--Optional:-->
<get:DataSetResourceName>US</get:DataSetResourceName>
</get:options>
<get:rows>
<!--1 or more repetitions:-->
<get:row>
<!--You may enter the following 2 items in any order-->
<!--Optional:-->
<get:RoutingData>
<!--Optional:-->
<get:RouteDataPoint>
<get:Longitude></get:Longitude>
<get:Lattitude></get:Lattitude>
</get:RouteDataPoint>
<!--Optional:-->
<get:RoutingSegmentID></get:RoutingSegmentID>
</get:RoutingData>
</get:row>
</get:rows>
</get:GetRouteDataRequest>
</soapenv:Body>
</soapenv:Envelope>
出力:
<soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/">
<soap:Body>
<soap:Fault>
<faultcode>soap:Client</faultcode>
<faultstring>Unmarshalling Error:</faultstring>
</soap:Fault>
</soap:Body>
</soap:Envelope>
親切に助けてください。BEで該当するJAXBクラスのオブジェクトのNULLチェックを行ったのですが、コードはそれまで到達せず、自分より先にエラーを投げます。