Accessing Seam Web Service
twocoasttb Jul 5, 2007 7:47 PMHas anyone had success writing a client for a Seam web service? I've got a skeleton modeled after the seambay example:
@Remote public interface AgentRemote { public void processOrder(); }
@Stateless @WebService(name="AgentService", serviceName="AgentService") public class Agent implements AgentRemote { @WebMethod public void processOrder() { System.out.println("METHOD CALLED"); } }
When deployed, I can get the following WSDL from the service:
<definitions name='AgentService' targetNamespace='http://service.web.tcsc.twocoast.com/' xmlns='http://schemas.xmlsoap.org/wsdl/' xmlns:soap='http://schemas.xmlsoap.org/wsdl/soap/' xmlns:tns='http://service.web.tcsc.twocoast.com/' xmlns:xsd='http://www.w3.org/2001/XMLSchema'> <types> <xs:schema targetNamespace='http://service.web.tcsc.twocoast.com/' version='1.0' xmlns:tns='http://service.web.tcsc.twocoast.com/' xmlns:xs='http://www.w3.org/2001/XMLSchema'> <xs:element name='processOrder' type='tns:processOrder'/> <xs:element name='processOrderResponse' type='tns:processOrderResponse'/> <xs:complexType name='processOrder'/> <xs:complexType name='processOrderResponse'/> </xs:schema> </types> <message name='AgentService_processOrder'> <part element='tns:processOrder' name='processOrder'></part> </message> <message name='AgentService_processOrderResponse'> <part element='tns:processOrderResponse' name='processOrderResponse'></part> </message> <portType name='AgentService'> <operation name='processOrder' parameterOrder='processOrder'> <input message='tns:AgentService_processOrder'></input> <output message='tns:AgentService_processOrderResponse'></output> </operation> </portType> <binding name='AgentServiceBinding' type='tns:AgentService'> <soap:binding style='document' transport='http://schemas.xmlsoap.org/soap/http'/> <operation name='processOrder'> <soap:operation soapAction=''/> <input> <soap:body use='literal'/> </input> <output> <soap:body use='literal'/> </output> </operation> </binding> <service name='AgentService'> <port binding='tns:AgentServiceBinding' name='AgentServicePort'> <soap:address location='http://127.0.0.1:8080/AgentService/Agent'/> </port> </service> </definitions>
I've tried writing simple clients in both Axis and Axis2. Here's the Axis2 version:
import org.apache.axiom.om.OMAbstractFactory; import org.apache.axiom.om.OMElement; import org.apache.axiom.om.OMFactory; import org.apache.axiom.om.OMNamespace; import org.apache.axis2.AxisFault; import org.apache.axis2.addressing.EndpointReference; import org.apache.axis2.client.Options; import org.apache.axis2.client.ServiceClient; public class Client { public static void main(String[] args) throws Exception { try { String endpoint="http://127.0.0.1:8080/AgentService/Agent"; EndpointReference targetEPR = new EndpointReference(endpoint); OMFactory fac = OMAbstractFactory.getOMFactory(); OMNamespace omNs = fac.createOMNamespace("http://twocoast.com/service", "tcsc"); OMElement payload = fac.createOMElement("processOrder", omNs); Options options = new Options(); options.setTo(targetEPR); //options.setAction("tcsc:processOrder"); ServiceClient sender = new ServiceClient(); sender.setOptions(options); OMElement result = sender.sendReceive(payload); sender.fireAndForget(result); } catch (AxisFault axisFault) { axisFault.printStackTrace(); } } }
Regardless of the client, I get the following error in response to a request:
org.apache.axis2.AxisFault: Endpoint {http://service.web.tcsc.twocoast.com/}AgentServicePort does not contain operation meta data for: {http://twocoast.com/service}processOrder at org.apache.axis2.util.Utils.getInboundFaultFromMessageContext(Utils.java:434) at org.apache.axis2.description.OutInAxisOperationClient.send(OutInAxisOperation.java:373) at org.apache.axis2.description.OutInAxisOperationClient.execute(OutInAxisOperation.java:294) at org.apache.axis2.client.ServiceClient.sendReceive(ServiceClient.java:520) at org.apache.axis2.client.ServiceClient.sendReceive(ServiceClient.java:500) at Client.main(Client.java:27)
I've seen this error referenced in the JBoss WS forums, but haven't found a definitive answer. Has anyone had more luck with this than I have? BTW, I'm deploying to JBoss AS 4.2.0.GA and using Seam 2.0.0.BETA1