I've got object Order with an array of OrderOwner objects.
All objets are BeanPatterns.
I would like to send them beetwen Client and WebService useing
org.apache.axis.encoding.ser.BeanSerializer.
when I deploy WS in Tomcat with Axis everything is OK.
I can send Order with array od OrderOwners.
But when I trying deploy WS in JBoss-4.0.0 I've got errors during deserializing.
Could You help me?
---------------------- error --------------------------------
call.invoke() throws: IllegalArgumentException: array element type mismatch
jboss console:
15:12:36,343 ERROR [BeanPropertyTarget] Could not convert
[Lcom.myapp.OrderOwner; to bean field 'owner[0]', type [Lcom.myapp.OrderOwner;
15:12:36,343 ERROR [RPCInvocation] java.lang.IllegalArgumentException: array
element type mismatch
java.lang.IllegalArgumentException: array element type mismatch
--------------- client: -------------------
...
Order order = new Order();
order.setCustomerName("Glen Daniels");
OrderOwner[] oo = {new OrderOwner()};
oo[0].setName("Mikey Mouse");
order.setOrderName("TESTTEST-2");
order.setOwner((OrderOwner[])oo);
...
Service service = new Service();
Call call = (Call) service.createCall();
QName qn = new QName( "urn:BeanService", "Order" );
QName qn2 = new QName( "urn:BeanService", "OrderOwner" );
call.registerTypeMapping(Order.class, qn,
new
org.apache.axis.encoding.ser.BeanSerializerFactory(Order.class, qn),
new
org.apache.axis.encoding.ser.BeanDeserializerFactory(Order.class, qn));
call.registerTypeMapping(OrderOwner.class, qn2,
new
org.apache.axis.encoding.ser.BeanSerializerFactory(OrderOwner.class, qn2 ),
new
org.apache.axis.encoding.ser.BeanDeserializerFactory(OrderOwner.class, qn2));
Order result = null;
String endpoint = "http://localhost:8080/simple-ws4ee/exactpath/jse";
try {
call.setTargetEndpointAddress( new java.net.URL(endpoint) );
call.setOperationName( new QName("OrderProcessor", "processOrder")
);
call.addParameter( "arg1", qn, ParameterMode.IN );
call.setReturnType( qn, Order.class);
result = (Order) call.invoke( new Object[] { new Order[] { order }
} );
} catch (AxisFault fault) {
//result = "Error : " + fault.toString();
System.out.println("er = "+fault.toString());
}
---------------- classes --------------------
public class Order extends SimpleOrder
{
private String customerName;
private String shippingAddress;
private OrderOwner[] owner;
public Order() {}
public void setOwner(OrderOwner[] owner) {
this.owner = owner;
}
public OrderOwner[] getOwner() {
return this.owner;
}
public String getCustomerName() { return customerName; }
public void setCustomerName(String name) { customerName = name; }
public String getShippingAddress() { return shippingAddress; }
public void setShippingAddress(String address) { shippingAddress = address;
}
}
public class OrderOwner {
private String name = "";
public OrderOwner() {
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String toString() {
return this.name;
}
}
public class SimpleOrder {
private String orderName = "";
public SimpleOrder() {}
public void setOrderName(String orderName) {
this.orderName = orderName;
}
public String getOrderName() {
return this.orderName;
}
}
--------- WS implements interface (nothing special)----------------
public interface BeanService extends java.rmi.Remote {
public Order processOrder(Order []orders) throws
java.rmi.RemoteException;
}
---------jaxrpc-mapping.xml -------------------
<?xml version='1.0' encoding='UTF-8' ?>
<java-wsdl-mapping
xmlns="http://java.sun.com/xml/ns/j2ee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee
http://www.ibm.com/webservices/xsd/j2ee_jaxrpc_mapping_1_1.xsd"
version="1.1">
<package-mapping>
<package-type>com.myapp</package-type>
http://myapp.com
</package-mapping>
</java-wsdl-mapping>
------------------ ws4ee-deployment.xml--------------------
<deployment
xmlns='http://xml.apache.org/axis/wsdd/'
xmlns:java='http://xml.apache.org/axis/wsdd/providers/java'
xmlns:soap='http://schemas.xmlsoap.org/soap/encoding/'
xmlns:xsi='http://www.w3.org/2000/10/XMLSchema-instance'
xmlns:xsd='http://www.w3.org/2001/XMLSchema'>
<typeMapping
qname="myNS:Order"
xmlns:myNS="urn:BeanService"
serializer='org.apache.axis.encoding.ser.BeanSerializerFactory'
deserializer='org.apache.axis.encoding.ser.BeanDeserializerFactory'
type="java:com.myapp.Order"
encodingStyle=''
/>
<typeMapping
qname="myNS:OrderOwner"
xmlns:myNS="urn:BeanService"
serializer='org.apache.axis.encoding.ser.BeanSerializerFactory'
deserializer='org.apache.axis.encoding.ser.BeanDeserializerFactory'
type="java:com.myapp.OrderOwner"
encodingStyle=''
/>
---------------------- generated by Java2WSDL file .wsdl --------------------
<?xml version="1.0" encoding="UTF-8"?>
<wsdl:definitions targetNamespace="http://myapp.com"
xmlns:impl="http://myapp.com" xmlns:intf="http://myapp.com"
xmlns:apachesoap="http://xml.apache.org/xml-soap"
xmlns:wsdlsoap="http://schemas.xmlsoap.org/wsdl/soap/"
xmlns:soapenc="http://schemas.xmlsoap.org/soap/encoding/"
xmlns:xsd="http://www.w3.org/2001/XMLSchema"
xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/"
xmlns="http://schemas.xmlsoap.org/wsdl/">
<wsdl:types>
<attribute ref="soapenc:arrayType" wsdl:arrayType="impl:OrderOwner[]"/>
<attribute ref="soapenc:arrayType" wsdl:arrayType="impl:Order[]"/>
</wsdl:types>
<wsdl:message name="processOrderRequest">
<wsdl:part name="in0" type="impl:ArrayOfOrder"/>
</wsdl:message>
<wsdl:message name="processOrderResponse">
<wsdl:part name="processOrderReturn" type="impl:Order"/>
</wsdl:message>
<wsdl:portType name="BeanService">
<wsdl:operation name="processOrder" parameterOrder="in0">
<wsdl:input name="processOrderRequest"
message="impl:processOrderRequest"/>
<wsdl:output name="processOrderResponse"
message="impl:processOrderResponse"/>
</wsdl:operation>
</wsdl:portType>
<wsdl:binding name="BeanServiceSoapBinding" type="impl:BeanService">
<wsdlsoap:binding style="rpc"
transport="http://schemas.xmlsoap.org/soap/http"/>
<wsdl:operation name="processOrder">
<wsdlsoap:operation soapAction=""/>
<wsdl:input name="processOrderRequest">
<wsdlsoap:body use="literal" namespace="http://myapp.com"/>
</wsdl:input>
<wsdl:output name="processOrderResponse">
<wsdlsoap:body use="literal" namespace="http://myapp.com"/>
</wsdl:output>
</wsdl:operation>
</wsdl:binding>
<wsdl:service name="BeanServiceService">
<wsdl:port name="BeanService" binding="impl:BeanServiceSoapBinding">
<wsdlsoap:address
location="http://localhost:8080/ws4ee/services/BeanService"/>
</wsdl:port>
</wsdl:service>
</wsdl:definitions>
---------------------------------------------------------------
View the original post :
http://www.jboss.org/index.html?module=bb&op=viewtopic&p=3860744#3860744
Reply to the post :
http://www.jboss.org/index.html?module=bb&op=posting&mode=reply&p=3860744
-------------------------------------------------------
The SF.Net email is sponsored by: Beat the post-holiday blues
Get a FREE limited edition SourceForge.net t-shirt from ThinkGeek.
It's fun and FREE -- well, almost....http://www.thinkgeek.com/sfshirt
_______________________________________________
JBoss-Development mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/jboss-development