1

EclipseLink を実行する Web サービスがあります。データベース スキーマに基づく Java クラスを NetBeans で生成しました (「データベースからのエンティティ クラス...」)。

私の問題は、データベース スキーマに基づいて NetBeans によって生成された Person.java と Group.java という 2 つのクラスについてです。Person.java および Group.java は、JAR ファイル「MyLib.jar」の一部です。

Group.java には、次のコードがあります (他のコードの中でも):

@Column(name = "groupName") 
private String groupName;    
@OneToMany(cascade = CascadeType.ALL, mappedBy = "group")
private Collection<Person> personCollection;

public String setGroupName(String groupName) {
    this.groupName = groupName;
}

public String getGroupName(){
    return groupName;
}

@XmlTransient
public Collection<Person> getPersonCollection() {
    return personCollection;
}

public void setPersonCollection(Collection<Person> personCollection) {
    this.personCollection = personCollection;
}

「MyLib.jar」を含む 2 つの異なるアプリケーションがあります。1 つは Web サービス自体で、もう 1 つは Web サービスに接続するクライアントです。もちろん、クライアントには Web サービス インターフェイス JAR も含まれています。

クライアントで、次のように Person のコレクションを作成し、グループ インスタンスを Web サービスに送信します。

Collection<Person> persons = new ArrayList<Person>();
Person person = new Person();
person.setName("Peter");
persons.add(person); 
group.setName("GroupName");
group.setPersonCollection(persons);
System.out.print(persons); // prints the instance and its content
webserviceInstance.setGroup(group);

本当に奇妙なことは、Web サービス メソッドsetGroupでは、コレクションが null であることです。

@Override
public void setGroup(Group group) {
    System.out.print(group.getGroupName()); // prints "GroupName"
    System.out.print(group.getPersonCollection()); // prints null meaning the instance is null
    ...
}

Web サービスではコレクションが null であるのに、クライアントではコレクションが null ではない理由を理解できません。私は何か間違ったことをしていますか?

4

2 に答える 2

0

問題は、WebService がコレクションを直接サポートしていないことです。次のようなオブジェクトのコレクションを含むクラスを実装する必要があります。

public class ListExamenConductor implements List<Examenconductor>{

    private ArrayList<Examenconductor> al = new ArrayList<Examenconductor>();
.... //Need to implements all methods

次に、webService で、次のようにすべてのコレクションをオブジェクトに送信します。

@WebMethod(operationName = "consultarExamenConductor")
    public ListExamenConductor consultarExamenConductor(@WebParam(name = "identificacion") Identificacion identificacion) {
        System.out.println("Consultar examenes, consultado en "+new Date());
        EntityManagerFactory emFactory = Persistence.createEntityManagerFactory("scrc_proyectoPU");
        EntityManager em = emFactory.createEntityManager();
        ExamenconductorJpaController jpaController  = new ExamenconductorJpaController(em.getTransaction(), emFactory);
        ListExamenConductor  examenes = new ListExamenConductor();
        examenes.addAll(jpaController.consultarExamen(identificacion));
        System.out.println("Consultar antecedente, resultado "+examenes.size() + " en "+new Date());
        return examenes;
    }

できます

于 2013-11-21T04:35:07.837 に答える
-1

私は同じ問題を抱えており、解決策はJPAを使用しない他のクラスを作成し、このクラスでWebServiceを動作させます.jpaエントリのタグが競合していると思います

于 2013-11-13T23:51:20.520 に答える