Настройка SOAP клиента JAX-WS

267
05 декабря 2017, 20:54

Есть http://www.cbr.ru/DailyInfoWebServ/DailyInfo.asmx?op=GetCursOnDate При тестировании постманом получаю

У себя в программе получаю пустой ответ: []

Сервис

    import java.net.MalformedURLException;
    import java.net.URL;
    import javax.xml.namespace.QName;
    import javax.xml.ws.Service;
    import javax.xml.ws.WebEndpoint;
    import javax.xml.ws.WebServiceClient;
    import javax.xml.ws.WebServiceException;

    @WebServiceClient(name = "DailyInfo", targetNamespace = "http://web.cbr.ru/", wsdlLocation = "http://www.cbr.ru/DailyInfoWebServ/DailyInfo.asmx")
 public class DailyInfo extends Service {
private final static URL DAILYINFO_WSDL_LOCATION;
private final static WebServiceException DAILYINFO_EXCEPTION;
private final static QName DAILYINFO_QNAME = new QName("http://web.cbr.ru/", "DailyInfo");
static {
    URL url = null;
    WebServiceException e = null;
    try {
        url = new URL("http://www.cbr.ru/DailyInfoWebServ/DailyInfo.asmx");
    } catch (MalformedURLException ex) {
        e = new WebServiceException(ex);
    }
    DAILYINFO_WSDL_LOCATION = url;
    DAILYINFO_EXCEPTION = e;
}
public DailyInfo() {
    super(__getWsdlLocation(), DAILYINFO_QNAME);
}

@WebEndpoint(name = "DailyInfoSoap")
public DailyInfoSoap getDailyInfoSoap() {
    return super.getPort(new QName("http://web.cbr.ru/", "DailyInfoSoap"), DailyInfoSoap.class);
}

private static URL __getWsdlLocation() {
    if (DAILYINFO_EXCEPTION!= null) {
        throw DAILYINFO_EXCEPTION;
    }
    return DAILYINFO_WSDL_LOCATION;
}
}

Интерфейс

     import com.sun.xml.ws.runtime.config.ObjectFactory;
     import javax.jws.WebMethod;
     import javax.jws.WebParam;
     import javax.jws.WebResult;
     import javax.jws.WebService;
     import javax.xml.bind.annotation.XmlSeeAlso;
     import javax.xml.datatype.XMLGregorianCalendar;
     import javax.xml.ws.RequestWrapper;
     import javax.xml.ws.ResponseWrapper;

     @WebService(name = "DailyInfoSoap", targetNamespace = 
      "http://web.cbr.ru/")
     @XmlSeeAlso({ObjectFactory.class})
     public interface DailyInfoSoap {
     @WebMethod(operationName = "GetCursOnDate", action = 
     "http://web.cbr.ru/GetCursOnDate")
     @WebResult(name = "GetCursOnDateResult", targetNamespace = 
     "http://web.cbr.ru/")
     @RequestWrapper(localName = "GetCursOnDate", targetNamespace = 
     "http://web.cbr.ru/", className = "GetCursOnDate")
     @ResponseWrapper(localName = "GetCursOnDateResponse", targetNamespace = 
     "http://web.cbr.ru/", className = "GetCursOnDateResponse")
    public GetCursOnDateResponse.GetCursOnDateResult 
     getCursOnDate(@WebParam(name = "On_date", targetNamespace = 
    "http://web.cbr.ru/") XMLGregorianCalendar onDate);
      }

main

    import javax.xml.datatype.DatatypeConfigurationException;
   import javax.xml.datatype.DatatypeFactory;
   import javax.xml.datatype.XMLGregorianCalendar;
    import java.util.GregorianCalendar;
  public class JavaStudyWS {
public static void main(String[] args) {
    testSOAPFromClient();
}
private static void testSOAPFromClient() {
    try {
        GregorianCalendar gregorianCalendar = new GregorianCalendar(2017, 12, 3);
        DatatypeFactory datatypeFactory;
        datatypeFactory = DatatypeFactory.newInstance();
        XMLGregorianCalendar date = datatypeFactory.newXMLGregorianCalendar(gregorianCalendar);
        DailyInfo service1 = new DailyInfo();
        DailyInfoSoap port1 = service1.getDailyInfoSoap();
        GetCursOnDateResponse.GetCursOnDateResult result = 
     port1.getCursOnDate(date);
        System.out.println(result.getAny().getRows());
    } catch (DatatypeConfigurationException e) {
        e.printStackTrace();
    }
     }
  }

GetCursOnDate

   @XmlAccessorType(XmlAccessType.FIELD)
   @XmlType(name = "", propOrder = {
    "onDate"
   })
   @XmlRootElement(name = "GetCursOnDate")
  public class GetCursOnDate {
@XmlElement(name = "On_date", required = true)
@XmlSchemaType(name = "dateTime")
protected XMLGregorianCalendar onDate;

public XMLGregorianCalendar getOnDate() {
    return onDate;
}

public void setOnDate(XMLGregorianCalendar value) {
    this.onDate = value;
}
}

GetCursOnDateResponse

@XmlAccessorType(XmlAccessType.FIELD)
@XmlType(name = "", propOrder = {"getCursOnDateResult"})
@XmlRootElement(name = "GetCursOnDateResponse")
public class GetCursOnDateResponse {
@XmlElement(name = "GetCursOnDateResult")
protected GetCursOnDateResponse.GetCursOnDateResult getCursOnDateResult;

public GetCursOnDateResponse.GetCursOnDateResult getGetCursOnDateResult() {
    return getCursOnDateResult;
}
public void setGetCursOnDateResult(GetCursOnDateResponse.GetCursOnDateResult value) {
    this.getCursOnDateResult = value;
}

@XmlAccessorType(XmlAccessType.FIELD)
@XmlType(name = "", propOrder = {"any"})
public static class GetCursOnDateResult {
    @XmlElement(name="diffgram",namespace="urn:schemas-microsoft-com:xml-diffgram-v1")
    protected ValuteData any;
    public ValuteData getAny() {
        return any;
    }
    public void setAny(ValuteData any) {
        this.any = any;
    }
}

 }

ValuteCursOnDate

       @XmlAccessorType(XmlAccessType.FIELD)
public  class ValuteCursOnDate {
@XmlElement(name="Vname")
private String name;
@XmlElement(name="Vnom")
private BigDecimal nom;
@XmlElement(name="Vcurs")
private BigDecimal curs;
@XmlElement(name="Vcode")
private int code;
@XmlElement(name="VchCode")
private String chCode;
public String getName() {
    return name;
}
public void setName(String name) {
    this.name = name;
}
public BigDecimal getNom() {
    return nom;
}
public void setNom(BigDecimal nom) {
    this.nom = nom;
}
public BigDecimal getCurs() {
    return curs;
}
public void setCurs(BigDecimal curs) {
    this.curs = curs;
}
public int getCode() {
    return code;
}
public void setCode(int code) {
    this.code = code;
}
public String getChCode() {
    return chCode;
}
public void setChCode(String chCode) {
    this.chCode = chCode;
}
}

ValuteData

     @XmlType
@XmlAccessorType(XmlAccessType.FIELD)
public class ValuteData {
@XmlElementWrapper(name="ValuteData")
@XmlElement(name="ValuteCursOnDate")
private List<ValuteCursOnDate> rows = new ArrayList<ValuteCursOnDate>();
public List<ValuteCursOnDate> getRows() {
    return rows;
}
public void setRows(List<ValuteCursOnDate> rows) {
    this.rows = rows;
}
}
Answer 1

Ошибка в дате,нужно выбрать 11 месяц GregorianCalendar gregorianCalendar = new GregorianCalendar(2017, 12, 3);

READ ALSO
Олимпиадная задача на вероятность

Олимпиадная задача на вероятность

Есть проблема с одной олимпиадной задачей, но решить мне её нужно на 100Задача находится https://www

197
Формат дату в Jackson Spring Boot

Формат дату в Jackson Spring Boot

Ко мне приходит время в таком виде: "2017-12-04T15:45:11635Z"

164
Получить CID, MCC, MNC, LAC

Получить CID, MCC, MNC, LAC

Для реализации приложения требуется получить GSM Cell ID, к которой подключено устройство, приложение не нуждается в мощном интерфейсе, поэтому...

203
Ошибка запуска приложения при отладке

Ошибка запуска приложения при отладке

Не отображается название процесса в logcat, процесс устройства эмулятора отображаетсяИспользую Android Studio 3

187