Toshiyuki Kimura wrote: > To: 藤本さん > > はじめまして。木村です。 > > 残念ながら、この問いに対する答えは『無理です』ということに > なってしまいます...。 > > もし、クラスFooがJavaBeanであれば、BeanSerializerを利用する > ことが可能ですが、想定されている条件はそのようなケースではない > たいめです。ご本人独自でシリアライザ・デシリアライザを実装して > カスタムシリアライゼーションを行う必要があると思います。 > > 具体的にどのような利用方法を検討されているのかは不明ですが > 「org.apache.axis.encoding.ser.ArraySerializer.java」の実装 > などが、(もしかしたら)参考になるのではないかと思います。 > >> 初めまして 藤本と申します >> >> AXISの勉強をしていて,シリアライザとデシリアライザを自分で >> 定義してみようと思いましたが以下のような場合についての >> 簡単なサンプルを提示していただけませんか >> >> 1.クラスBarとクラスBazにはシリアライザとデシリアライザが >> 定義されている. >> 2.クラスFooはFoo(Bar bar, Baz baz)というpublicなコンストラクタ >> を持つがインスタンスフィールドにはBarとBazを持たない. >> 3.Fooはデフォルトコンストラクタを持たない. >> >> このような場合FooのデシリアライザをBarとBazのデシリアライザ >> を利用して定義するには? > どうもありがとうございます.
私はまだAXISについてほとんどわかっていないばかりでなく, MLの利用法もわからず,やっと私のメールがML内で有効になっていること が今し方わかりました(sendに対してフィルターをかけていたので一つも捕まらず 今までずいぶん寂しいMLだと思いこんでいました.) デシリアライズの実装についてMapSerializer等のソースを眺めて見たのですが わからないので取りあえずもっと簡単なところから始めようとして,まずBeanの プロパティ がBeanである場合について自分なりに(シリアライザは実装せずに BeanSerializerを使って) スタブ等つくってみましたが,以下の例外となります 致命的: 例外発生: / [en]-(Exception:) java.lang.IllegalArgumentException: object is not an instance of declaring class Beanのプロパティが基本的な型のときはうまくいったのですが何が悪いのでしょうか スタブは import java.net.MalformedURLException; import java.rmi.RemoteException; import org.apache.axis.AxisFault; import org.apache.axis.client.Call; import javax.xml.namespace.QName; import javax.xml.rpc.ParameterMode; import static org.apache.axis.encoding.XMLType.*; public class Service { private static final String _SERVICE_NAME = "FooService"; private static final String _ENDPOINT = "http://localhost:8080/axis/services/" + _SERVICE_NAME; private static final QName _BAR_QNAME = new QName( "urn:FooService", "Bar" ); private static final QName _BAZ_QNAME = new QName( "urn:FooService", "Baz" ); private Call _call; public Service() { try { _call = new Call(_ENDPOINT); _call.registerTypeMapping(Bar.class, _BAR_QNAME, new org.apache.axis.encoding.ser .BeanSerializerFactory (Bar.class, _BAR_QNAME), new org.apache.axis.encoding.ser .BeanDeserializerFactory (Bar.class, _BAR_QNAME)); _call.registerTypeMapping(Baz.class, _BAZ_QNAME, new org.apache.axis.encoding.ser .BeanSerializerFactory (Baz.class, _BAZ_QNAME), new org.apache.axis.encoding.ser .BeanDeserializerFactory (Baz.class, _BAZ_QNAME)); } catch(MalformedURLException e) { assert false : "Error:" + e.toString(); } } public void exec(final Bar bar) { try { _call.removeAllParameters(); _call.setOperationName( new QName(_SERVICE_NAME, "exec") ); _call.addParameter("arg1", _BAR_QNAME, ParameterMode.IN ); _call.setReturnType(AXIS_VOID); _call.invoke( new Object[]{project, } ); } catch (AxisFault fault) { assert false : "Error : " + fault.toString(); } catch (RemoteException fault) { assert false : "Error : " + fault.toString(); } } } WSDDは <service name="FooService" provider="java:RPC"> <parameter name="className" value="Service"/> <parameter name="allowedMethods" value="*"/> <parameter name="scope" value="application"/> <beanMapping qname="prj:Bar" xmlns:prj="urn:FooService" languageSpecificType="Bar" /> <beanMapping qname="prj:Baz" xmlns:prj="urn:FooService" languageSpecificType="Baz" /> </service> でBazはBarのプロパティです(getBaz,setBazがある). --------------------------------------------------------------------- To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED]