J'écris un service Web SOAP pour Windows Phone 8(WP8) Enterprise MDM en Java. Le client était WP8, et sa requête SOAP sera comme suit, et je n'ai pas le droit de modifier quoi que ce soit sur cette demande.Liaison JAXB pour les paramètres du corps de la requête SOAP JAX-WS
<s:Envelope xmlns:a="http://www.w3.org/2005/08/addressing" xmlns:s="http://www.w3.org/2003/05/soap-envelope">
<s:Header>
<a:Action s:mustUnderstand="1">http://schemas.microsoft.com/windows/management/2012/01/enrollment/IDiscoveryService/Discover</a:Action>
<a:MessageID>urn:uuid: 748132ec-a575-4329-b01b-6171a9cf8478</a:MessageID>
<a:ReplyTo>
<a:Address>http://www.w3.org/2005/08/addressing/anonymous</a:Address>
</a:ReplyTo>
<a:To s:mustUnderstand="1">https://ENROLLTEST.CONTOSO.COM/EnrollmentServer/Discovery.svc</a:To>
</s:Header>
<s:Body>
<Discover xmlns="http://schemas.microsoft.com/windows/management/2012/01/enrollment/">
<request xmlns:i="http://www.w3.org/2001/XMLSchema-instance">
<EmailAddress>[email protected]</EmailAddress>
<RequestVersion>1.0</RequestVersion>
</request>
</Discover>
</s:Body>
</s:Envelope>
Après ma classe de service,
@WebService(targetNamespace = "http://schemas.microsoft.com/windows/management/2012/01/enrollment/")
@BindingType(SOAPBinding.SOAP12HTTP_BINDING)
@Addressing(enabled=true, required=true)
public interface DiscoveryService {
@WebMethod(operationName = "Discover")
SOAPMessage handleDiscoveryRequest(@WebParam(name = "request",targetNamespace = "http://www.w3.org/2001/XMLSchema-instance")
DiscoveryRequest request) throws Exception;
}
Et le corps demande mapping class xml,
@XmlRootElement(name = "request", namespace = "http://www.w3.org/2001/XMLSchema-instance")
@XmlAccessorType(XmlAccessType.FIELD)
public class DiscoveryRequest {
@XmlElement(name = "EmailAddress", namespace = "http://www.w3.org/2001/XMLSchema-instance")
private String emailId;
@XmlElement(name = "RequestVersion", namespace = "http://www.w3.org/2001/XMLSchema-instance")
private String version;
// Getters and Setters
}
Cependant, à partir du SOAP UI, j'ai eu la demande d'exemple suivant avec généré WSDL
<soap:Envelope xmlns:soap="http://www.w3.org/2003/05/soap-envelope" xmlns:enr="http://schemas.microsoft.com/windows/management/2012/01/enrollment/" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<soap:Header/>
<soap:Body>
<enr:Discover>
<!--Optional:-->
<xsi:request>
<!--Optional:-->
<xsi:EmailAddress>?</xsi:EmailAddress>
<!--Optional:-->
<xsi:RequestVersion>?</xsi:RequestVersion>
</xsi:request>
</enr:Discover>
</soap:Body>
</soap:Envelope>
Et, Quand j'envoie la demande prévue (première pression de code), j'ai eu la réponse d'erreur suivante dans SOAP UI
<soap:Envelope xmlns:soap="http://www.w3.org/2003/05/soap-envelope">
<soap:Header>
<Action xmlns="http://www.w3.org/2005/08/addressing">http://schemas.microsoft.com/windows/management/2012/01/enrollment/DiscoveryService/Discover/Fault/UnmarshalException</Action>
<MessageID xmlns="http://www.w3.org/2005/08/addressing">urn:uuid:d81dbc0f-cbd4-41dc-aa62-aed06f3c2dc6</MessageID>
<To xmlns="http://www.w3.org/2005/08/addressing">http://www.w3.org/2005/08/addressing/anonymous</To>
<RelatesTo xmlns="http://www.w3.org/2005/08/addressing">urn:uuid: 748132ec-a575-4329-b01b-6171a9cf8478</RelatesTo>
</soap:Header>
<soap:Body>
<soap:Fault>
<soap:Code>
<soap:Value>soap:Sender</soap:Value>
</soap:Code>
<soap:Reason>
<soap:Text xml:lang="en">Unmarshalling Error: unexpected element (uri:"http://schemas.microsoft.com/windows/management/2012/01/enrollment/", local:"request"). Expected elements are <{http://www.w3.org/2001/XMLSchema-instance}request></soap:Text>
</soap:Reason>
</soap:Fault>
</soap:Body>
</soap:Envelope>
Toute aide sur la façon de résoudre ce problème d'espace de noms contraignant JAXB?
Unmarshalling Error: unexpected element (uri:"http://schemas.microsoft.com/windows/management/2012/01/enrollment/", local:"request"). Expected elements are <{http://www.w3.org/2001/XMLSchema-instance}request
Je ne peux pas modifier la demande. C'est défini par WP8. Pouvez-vous élaborer davantage sur l'élimination de l'espace de nom de la cible? –
Regardez votre classe de service et mappage: partout où vous voyez XMLSchema-instance, supprimez-le et remplacez-le par l'espace de noms '.../enrollment'. Les éléments 'request', 'EmailAddress' et 'RequestVersion' doivent être dans l'espace de nommage 'enrollment', en particulier. – GenericParallel
Ok, je l'ai fait, Maintenant, je reçois, l'action «Action http://api.agent.windows.wso2.org/DiscoveryService/DiscoverRequest pas pris en charge» erreur –