[JBossWS] - "Endpoint does not contain operation metadata" exception
by chris05atm
Hello all. I've been stuck on this problem for 3 days now and it is driving me crazy. I originally had just one web method exposed as a web service and everything worked fine. I added an additional method and while the first operation still works... the second one throws a "Endpoint does not contain operation metadata" exception when it gets called.
This is running on jboss-4.2.0.GA with jbossws 1.2.1 GA.
WSDL:
| <?xml version="1.0" encoding="UTF-8"?>
|
| <wsdl:definitions name="XmlApiMethods" targetNamespace="xmlapi_1.0"
| xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/"
| xmlns:tns="xmlapi_1.0"
| xmlns="http://schemas.xmlsoap.org/wsdl/"
| xmlns:xsd="http://www.w3.org/2001/XMLSchema"
| xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/">
|
| <wsdl:types>
| <xsd:schema targetNamespace="xmlapi_1.0"
| elementFormDefault="qualified"
| xmlns:xsd="http://www.w3.org/2001/XMLSchema">
| <xsd:element name="find" type="tns:find_t" />
| <xsd:element name="findResponse" type="tns:findResponse_t" />
| <xsd:complexType name="find_t">
| <xsd:sequence>
| <xsd:element name="fullClassName" type="xsd:string" minOccurs="1" />
| <xsd:element name="filter" type="xsd:string" minOccurs="1" />
| <xsd:element name="resultFilter" type="xsd:string" minOccurs="0" />
| </xsd:sequence>
| </xsd:complexType>
|
| <xsd:complexType name="findResponse_t">
| <xsd:sequence>
| <xsd:element name="result" type="xsd:string" minOccurs="1" />
| </xsd:sequence>
| </xsd:complexType>
|
| <xsd:element name="ping" type="tns:ping_t" />
| <xsd:element name="pingResponse" type="tns:pingResponse_t" />
|
| <xsd:complexType name="ping_t">
| <xsd:sequence/>
| </xsd:complexType>
|
| <xsd:complexType name="pingResponse_t">
| <xsd:sequence/>
| </xsd:complexType>
| </xsd:schema>
| </wsdl:types>
|
| <wsdl:message name="FindInterface_find">
| <wsdl:part name="parameters" element="tns:find" />
| </wsdl:message>
| <wsdl:message name="FindInterface_findResponse">
| <wsdl:part name="result" element="tns:findResponse" />
| </wsdl:message>
|
| <wsdl:message name="FindInterface_ping">
| <wsdl:part name="parameters" element="tns:ping" />
| </wsdl:message>
| <wsdl:message name="FindInterface_pingResponse">
| <wsdl:part name="result" element="tns:pingResponse" />
| </wsdl:message>
|
| <wsdl:portType name="FindInterface">
| <wsdl:operation name="find">
| <wsdl:input message="tns:FindInterface_find" />
| <wsdl:output message="tns:FindInterface_findResponse" />
| </wsdl:operation>
|
| <wsdl:operation name="ping">
| <wsdl:input message="tns:FindInterface_ping" />
| <wsdl:output message="tns:FindInterface_pingResponse" />
| </wsdl:operation>
| </wsdl:portType>
|
| <wsdl:binding name="FindInterfaceBinding"
| type="tns:FindInterface">
| <soap:binding transport="http://schemas.xmlsoap.org/soap/http"
| style="document" />
| <wsdl:operation name="find">
| <soap:operation soapAction="" />
| <wsdl:input>
| <soap:body use="literal" />
| </wsdl:input>
| <wsdl:output>
| <soap:body use="literal" />
| </wsdl:output>
| </wsdl:operation>
|
| <wsdl:operation name="ping">
| <soap:operation soapAction="" />
| <wsdl:input>
| <soap:body use="literal" />
| </wsdl:input>
| <wsdl:output>
| <soap:body use="literal" />
| </wsdl:output>
| </wsdl:operation>
| </wsdl:binding>
|
| <wsdl:service name="XmlApiMethods">
| <wsdl:port name="FindInterfacePort"
| binding="tns:FindInterfaceBinding">
| <soap:address location="REPLACE_WITH_ACTUAL_URL" />
| </wsdl:port>
| </wsdl:service>
| </wsdl:definitions>
|
Interface:
|
| package webservice;
|
| import javax.jws.WebMethod;
| import javax.jws.WebParam;
| import javax.jws.WebResult;
| import javax.jws.WebService;
| import javax.xml.ws.RequestWrapper;
| import javax.xml.ws.ResponseWrapper;
|
| @WebService(name = "FindInterface", targetNamespace = "xmlapi_1.0")
| //@XmlSeeAlso({
| // ObjectFactory.class
| //})
| public interface FindInterface {
|
|
| /**
| *
| * @param filter
| * @param fullClassName
| * @param resultFilter
| * @return
| * returns java.lang.String
| */
| @WebMethod
| @WebResult(name = "result", targetNamespace = "xmlapi_1.0")
| @RequestWrapper(localName = "find", targetNamespace = "xmlapi_1.0", className = "webservice.FindT")
| @ResponseWrapper(localName = "findResponse", targetNamespace = "xmlapi_1.0", className = "webservice.FindResponseT")
| public String find(
| @WebParam(name = "fullClassName", targetNamespace = "xmlapi_1.0")
| String fullClassName,
| @WebParam(name = "filter", targetNamespace = "xmlapi_1.0")
| String filter,
| @WebParam(name = "resultFilter", targetNamespace = "xmlapi_1.0")
| String resultFilter);
|
| /**
| *
| */
| @WebMethod
| @RequestWrapper(localName = "ping", targetNamespace = "xmlapi_1.0", className = "webservice.PingT")
| @ResponseWrapper(localName = "pingResponse", targetNamespace = "xmlapi_1.0", className = "webservice.PingResponseT")
| public void ping();
|
| }
|
Implementation snippet:
| package webservice;
|
| @WebService(name = "FindInterface", serviceName = "XmlApiMethods",
| portName = "FindInterfacePort",
| targetNamespace = "xmlapi_1.0",
| wsdlLocation = "META-INF/wsdl/XmlApiMethods.wsdl" ,
| endpointInterface = "webservice.FindInterface")
|
| public class FindImpl implements FindInterface { ...
|
Bit of code that generates the ping request (raw request). This is what currently fails. The client uses something very similar and cannot be changed:
| public static String getPingRequest(String user, String password, String clientId) {
| return "<?xml version=\"1.0\" encoding=\"UTF-8\"?>" +
| "<SOAP:Envelope "+
| "xmlns:SOAP=\"http://schemas.xmlsoap.org/soap/envelope/\" " +
| "xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\">" +
| "<SOAP:Header><header xmlns=\"xmlapi_1.0\">" +
| "<security><user>" + user +
| "</user><password>"+ password +
| "</password></security><requestID>"+clientId+"</requestID>"+
| "</header></SOAP:Header>"+
| "<SOAP:Body><ping xmlns=\"xmlapi_1.0\"/></SOAP:Body></SOAP:Envelope>";
| }
|
The find bit of code that currently works:
| public static String getSoapRequest(String user, String password, String clientId,
| String root) {
| return "<?xml version=\"1.0\" encoding=\"UTF-8\"?>" +
| "<SOAP:Envelope "+
| "xmlns:SOAP=\"http://schemas.xmlsoap.org/soap/envelope/\" "+
| "xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\">\n"+
| "<SOAP:Header><header xmlns=\"xmlapi_1.0\">\n"+
| "<security><user>" + user +
| "</user><password>"+ password +
| "</password></security><requestID>"+clientId+"</requestID>\n"+
| "</header></SOAP:Header>"+
| "<SOAP:Body><find xmlns=\"xmlapi_1.0\">"+
| "<fullClassName>"+root+"</fullClassName>"+
| "<filter/>"+
| "<resultFilter><children/></resultFilter>"+
| "</find></SOAP:Body></SOAP:Envelope>";
| }
|
I have read about operations that take no parameters having issues when using "wrapped" document/literal style. Is this the problem? I have tried so many different permutations of WSDL, java code, etc. that I am out of ideas.
Any suggestions or pointers would be appreciated. This seems to be a somewhat common issue on this forum but none of the other examples seem to be the cause here and this one involves an empty "wrapped" operation.
View the original post : http://www.jboss.com/index.html?module=bb&op=viewtopic&p=4062747#4062747
Reply to the post : http://www.jboss.com/index.html?module=bb&op=posting&mode=reply&p=4062747
17 years, 5 months