Web services 从soap服务获取响应中的空值
我正在打电话给soap服务。我没有得到任何异常,但响应包含空值。但服务至少返回错误消息。请找到或指导任何解决方案Web services 从soap服务获取响应中的空值,web-services,spring-mvc,soap,jaxb,Web Services,Spring Mvc,Soap,Jaxb,我正在打电话给soap服务。我没有得到任何异常,但响应包含空值。但服务至少返回错误消息。请找到或指导任何解决方案 @Component("createCardServiceImpl") public class CreateCardServiceImpl implements CreateCardService { private static final ObjectFactory WS_CLIENT_FACTORY = new ObjectFactory(); priva
@Component("createCardServiceImpl")
public class CreateCardServiceImpl implements CreateCardService {
private static final ObjectFactory WS_CLIENT_FACTORY = new ObjectFactory();
private WebServiceTemplate webServiceTemplate;
@Autowired
public void YourServiceClient(WebServiceTemplate webServiceTemplate) {
this.webServiceTemplate = webServiceTemplate;
}
@Override
public FVCardUpdateResponse createUpdateCardRequest(FVCardUpdateRequest fvCardUpdateRequest) {
FVCardUpdateResponse fvCardUpdateResponse=new FVCardUpdateResponse();
try{
FVCardUpdateRequest request = WS_CLIENT_FACTORY.createFVCardUpdateRequest();
request=fvCardUpdateRequest;
SoapActionCallback actionCallBack = new SoapActionCallback("https://www.sampleService/Selfservice.asmx") {
public void doWithMessage(WebServiceMessage msg) {
SoapMessage smsg = (SoapMessage)msg;
SoapHeader soapHeader = smsg.getSoapHeader();
try{
StringSource headerSource = new StringSource("<UserCredentials xmlns='http://www.corecard.com/Prepaid'>\n" +
"<userid>"+"srihari"+"</userid>\n" +
"<password>"+"srihari123"+"</password>\n" +
"</UserCredentials>");
Transformer transformer = TransformerFactory.newInstance().newTransformer();
transformer.transform(headerSource, soapHeader.getResult());
smsg.setSoapAction("http://www.sampleservice/CardUpdate");
}catch(Exception e)
{
e.printStackTrace();
}
}
};
fvCardUpdateResponse = (FVCardUpdateResponse) webServiceTemplate.marshalSendAndReceive("https://www.sampleService/Selfservice.asmx", request, actionCallBack);
System.out.println("source "+fvCardUpdateResponse);
}catch (SoapFaultClientException e) {
System.out.println("fault code "+e.getFaultCode());
System.out.println("fault string "+e.getFaultStringOrReason());
System.out.println("stack trace "+e.fillInStackTrace().getLocalizedMessage());
e.printStackTrace();
} catch (WebServiceIOException we) {
System.out.println("In web service IO Exception "+we.getRootCause());
we.printStackTrace();
} catch (Exception e) {
e.printStackTrace();
}
return fvCardUpdateResponse;
}
}
这是我的要求类
@XmlAccessorType(XmlAccessType.FIELD)
@XmlType(name = "CARDUPDATE",propOrder={"CLIENTID","CARDNUMBER","FIRSTNAME"})
@XmlRootElement(name = "CARDUPDATE")
public class FVCardUpdateRequest {
@XmlElement(name = "CLIENTID")
private String CLIENTID;
@XmlElement(name = "CARDNUMBER")
private String CARDNUMBER;
//Other setters and getters
}
这是我的反应课
@XmlAccessorType(XmlAccessType.FIELD)
@XmlType(name = "CardUpdateResponse",propOrder={"CARDUPDATE_RET"})
@XmlRootElement(name = "CardUpdateResponse",namespace="http://www.sampleurl.com/Prepaid")
public class FVCardUpdateResponse {
@XmlElement(name="CARDUPDATE_RET")
private CARDUPDATE_RET CARDUPDATE_RET;
//Setters and getters
}
@XmlAccessorType(XmlAccessType.FIELD)
@XmlType(name = "CARDUPDATE_RET", propOrder = {
"ResErrorMsg",
"ResErrorCode",
"ResCode",
"AccountNumber"
})
public class CARDUPDATE_RET {
@XmlElement(name = "AccountNumber")
private String AccountNumber;
@XmlElement(name = "ResCode")
private String ResCode;
@XmlElement(name = "ResErrorCode")
private String ResErrorCode;
@XmlElement(name = "ResErrorMsg")
private String ResErrorMsg;
}
这是我的xml响应示例:
<?xml version="1.0" encoding="UTF-8"?>
<CardUpdateResponse xmlns="http://www.sampleurl.com/Prepaid">
<CARDUPDATE_RET>
<ResErrorMsg>Card Updated Successfully</ResErrorMsg>
<ResErrorCode>Msgcu01</ResErrorCode>
<ResCode>1</ResCode>
<ACCOUNTNUMBER>2000000003918246</ACCOUNTNUMBER>
</CARDUPDATE_RET>
</CardUpdateResponse>
已成功更新卡
Msgcu01
1.
2000000003918246
最后,我在应用程序中发现我的错误,即我的请求和响应pojo不正确。我的回答是这样的
@XmlAccessorType(XmlAccessType.FIELD)
@XmlRootElement(name = "CardUpdateResponse",namespace="http://www.corecard.com/Prepaid")
public class FVCardUpdateResponse {
@XmlElement(name="CARDUPDATE_RET", namespace="http://www.corecard.com/Prepaid")
private CARDUPDATE_RET response;
//Getters and setters
public static class CARDUPDATE_RET{
@XmlElement(name = "ACCOUNTNUMBER", namespace="http://www.corecard.com/Prepaid")
private String AccountNumber;
@XmlElement(name = "ResCode", namespace="http://www.corecard.com/Prepaid")
private String ResCode;
@XmlElement(name = "ResErrorCode", namespace="http://www.corecard.com/Prepaid")
private String ResErrorCode;
@XmlElement(name = "ResErrorMsg", namespace="http://www.corecard.com/Prepaid")
private String ResErrorMsg;
//Getters and Setters
}
}
@XmlAccessorType(XmlAccessType.FIELD)
@XmlRootElement(name = "CardUpdateResponse",namespace="http://www.corecard.com/Prepaid")
public class FVCardUpdateResponse {
@XmlElement(name="CARDUPDATE_RET", namespace="http://www.corecard.com/Prepaid")
private CARDUPDATE_RET response;
//Getters and setters
public static class CARDUPDATE_RET{
@XmlElement(name = "ACCOUNTNUMBER", namespace="http://www.corecard.com/Prepaid")
private String AccountNumber;
@XmlElement(name = "ResCode", namespace="http://www.corecard.com/Prepaid")
private String ResCode;
@XmlElement(name = "ResErrorCode", namespace="http://www.corecard.com/Prepaid")
private String ResErrorCode;
@XmlElement(name = "ResErrorMsg", namespace="http://www.corecard.com/Prepaid")
private String ResErrorMsg;
//Getters and Setters
}
}