Итак, я сейчас работаю над системой, состоящей из Java Web-приложения и клиентского приложения C#. Веб-приложение имеет Java Web Service, который имеет метод, который возвращает сущности объект программы класса:Удаленный доступ к объекту Jpa
@WebMethod(operationName = "getProgram")
public Program getProgram(@WebParam(name = "macAddress") String macAddress){
Device device = DeviceManager.getInstance().getDevice(macAddress);
if(device != null){
return device.getProgram();
}
return null;
}
Это возвращение объект типа программы, которая имеет множество свойств и отношений:
@Entity
@Table(name = "PROGRAM", schema = "APP")
@XmlRootElement
@NamedQueries({
@NamedQuery(name = "Program.getProgramsByWeather", query = "SELECT p FROM Program p WHERE p.weather = :weather")})
public class Program extends DbEntity implements Serializable {
private static final long serialVersionUID = 1L;
@JoinColumn(name = "LOGO_ID", referencedColumnName = "ID")
@OneToOne(cascade = CascadeType.ALL, orphanRemoval = true, fetch= FetchType.EAGER)
private Logo logo;
@JoinColumn(name = "WEATHER_ID", referencedColumnName = "ID")
@ManyToOne
private Weather weather;
@OneToMany(cascade = CascadeType.ALL, mappedBy = "program", orphanRemoval = true)
private List<ProgramPlaylist> programPlaylistList = new ArrayList<>();
@OneToMany(cascade = CascadeType.ALL, mappedBy = "program", orphanRemoval = true)
private List<ProgramTicker> programTickerList = new ArrayList<>();
@Column(name = "UPDATED")
private boolean updated;
public Program() {
}
public Program(String name, AppUser owner) {
super(name, owner);
}
public Logo getLogo() {
return logo;
}
public void setLogo(Logo logo) {
this.logo = logo;
}
public Weather getWeather() {
return weather;
}
public void setWeather(Weather weather) {
this.weather = weather;
}
public boolean isUpdated() {
return updated;
}
public void setUpdated(boolean updated) {
this.updated = updated;
}
@XmlElement
public List<ProgramPlaylist> getProgramPlaylistList() {
return programPlaylistList;
}
@XmlElement
public List<ProgramTicker> getProgramTickerList() {
return programTickerList;
}
@Override
public String toString() {
return "Program[ id=" + getId() + " ]";
}
}
Client может получить этот объект и получить доступ к некоторым свойствам в клиентском приложении, например program.name, которое он наследует от DbEntity, но когда я пытаюсь позвонить примерно так:
program.logo.name
клиент бросает NullReferenceException. Такое же исключение возникает, когда я пытаюсь выполнить итерацию по элементам programPlaylistList ArrayList.
Я предполагаю, что сам объект, который передается клиенту, не полностью загружен.
Как я могу решить эту проблему, пожалуйста, помогите ?!
EDIT Ok, поэтому я распечатал ответ XML, что клиент получить от службы и ее заселена правильно, но по какой-то причине поля объекта не заполняются и в основном нуль. Почему это происходит?
Кто-нибудь? Я действительно застрял здесь ... –