: O. Yuanying

EntityをJAX-WSの引数や返値にできない(バグ?)

デスクトップJavaの復権ということで、

Java Persistenceでデータベースをマッピングして、EJB3セッションビーンでデータベースを操作して、JAX-WSでクライアント・サーバーのやり取りして、SwingでGUI作って、Java Web Startで起動っていうのがものすごく手軽にできる予感。

というのを試してみようとJAX-WSを利用するためにMustangのベータ版と、JPAの実装としてHibernate EntityManagerのベータ版を落としてきました。開発環境はIDEに任せないで全部生でやってみようと思いEclipseです...。

適当にEntityに対するCRUD操作をJPAを利用して実装した後にそれをWebサービスとして「Java SE 6でJAX-WSを使ったWebサービスプログラミング」を参考にしつつ公開してみました。

最後にサーバ側のWebサービスを公開するためにwsgenコマンドを実行すると、

yuanying@vtc060228:~/workspace/server> wsgen -cp bin:lib/ejb3-persistence.jar -d bin -wsdl jp.fraction.test.server.impl.CommentPersisterImpl
error: java.lang.IllegalArgumentException: interface javax.persistence.Id is not visible from class loader
java.lang.IllegalArgumentException: interface javax.persistence.Id is not visible from class loader
        at java.lang.reflect.Proxy.getProxyClass(Proxy.java:353)
        at java.lang.reflect.Proxy.newProxyInstance(Proxy.java:581)
        at com.sun.xml.bind.v2.model.annotation.LocatableAnnotation.create(LocatableAnnotation.java:37)
        at com.sun.xml.bind.v2.model.annotation.RuntimeInlineAnnotationReader.getAllFieldAnnotations(RuntimeInlineAnnotationReader.java:31)
...

ClassLoaderからIdが見えないて...ちゃんとクラスパス通してるじゃんー。glassfishについてるwsgenコマンドならうまくいくんだけどこれはどうしろと。

MustangのブートストラップクラスローダーかエクステンションクラスローダーにJPAのライブラリを読み込ませるようにjarを配置しろと...?