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]