Ok... I have 1/2 an answer. By playing with the annotations (brute force really) I can
now get my list going over the wire, but... I lost my WSDL.
New Interface:
@WebService
| public interface OrderTakerRemote {
| public String msg(ArrayList<String> say);
| }
|
New Impl:
@Remote(OrderTakerRemote.class)
| @WebService(endpointInterface="com.kepler.ecom.services.OrderTakerRemote")
| @SOAPBinding(style = SOAPBinding.Style.RPC)
| @Stateless
| public class OrderTaker implements OrderTakerRemote {
|
| // Default constructor.
| public OrderTaker() {
| }
|
| @WebMethod
| public String msg(ArrayList<String> say) {
| // same as before
| }
| }
I'd rather annotate the interface, not the implementation but to get it working
it's a minor quibble.
My larger problem is the WSDL. If I specify a simple @WebService (no endpoint parameter)
in the impl then my WSDL looks something like this:
<definitions name="OrderTakerService"
targetNamespace="http://ecom.kepler..com/">
| -
| <types>
| -
| <xs:schema
targetNamespace="http://ecom.kepler.com/"
version="1.0">
| <xs:element name="msg" type="tns:msg"/>
| <xs:element name="msgResponse" type="tns:msgResponse"/>
| -
| <xs:complexType name="msg">
| -
| <xs:sequence>
| <xs:element maxOccurs="unbounded" minOccurs="0"
name="arg0" type="xs:string"/>
| </xs:sequence>
| </xs:complexType>
| -
| <xs:complexType name="msgResponse">
| -
| <xs:sequence>
| <xs:element minOccurs="0" name="return"
type="xs:string"/>
| </xs:sequence>
| </xs:complexType>
| </xs:schema>
| </types>
| -
| <message name="OrderTaker_msg">
| <part element="tns:msg" name="msg"/>
| </message>
| -
| <message name="OrderTaker_msgResponse">
| <part element="tns:msgResponse" name="msgResponse"/>
| </message>
| -
| <portType name="OrderTaker">
| -
| <operation name="msg" parameterOrder="msg">
| <input message="tns:OrderTaker_msg"/>
| <output message="tns:OrderTaker_msgResponse"/>
| </operation>
| </portType>
| -
| <binding name="OrderTakerBinding" type="tns:OrderTaker">
| <soap:binding style="document"
transport="http://schemas.xmlsoap.org/soap/http"/>
| -
| <operation name="msg">
| <soap:operation soapAction=""/>
| -
| <input>
| <soap:body use="literal"/>
| </input>
| -
| <output>
| <soap:body use="literal"/>
| </output>
| </operation>
| -
| <operation name="placeOrder_1_0">
| <soap:operation soapAction=""/>
| -
| <input>
| <soap:body use="literal"/>
| </input>
| -
| <output>
| <soap:body use="literal"/>
| </output>
| </operation>
| </binding>
| -
| <service name="OrderTakerService">
| -
| <port binding="tns:OrderTakerBinding"
name="OrderTakerPort">
| <soap:address
location="http://127.0.0.1:8080/keplerEAR-kepler/OrderTaker"/>
| </port>
| </service>
| </definitions>
As shown in this code (with the endpoint parameter) my WSDL looks like this:
<definitions name="OrderTakerService"
targetNamespace="http://ecom.kepler.com/">
| <import
location="http://127.0.0.1:8080/keplerEAR-kepler/OrderTaker?wsdl&resource=OrderTakerRemote_PortType8465038229007643058.wsdl"
namespace="http://services.ecom.kepler.aviall.com/"/>
| -
| <service name="OrderTakerService">
| -
| <port binding="ns1:OrderTakerRemoteBinding"
name="OrderTakerPort">
| <soap:address
location="http://127.0.0.1:8080/keplerEAR-kepler/OrderTaker"/>
| </port>
| </service>
| </definitions>
Somehow my Java client was fine with the abbreviated WSDL but I'm worried a non-Java
client may need all the detail in the longer version. The annotation combo that gives me
the longer (more complete?) WSDL doesn't let me pass my list. The short WSDL passes
my list.
Any ideas what's going on? What happened to all the stuff that defined the method
calls and the parameter types?
Any ideas appreciated! Confused newbie.
Greg
View the original post :
http://www.jboss.org/index.html?module=bb&op=viewtopic&p=4268184#...
Reply to the post :
http://www.jboss.org/index.html?module=bb&op=posting&mode=reply&a...