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
_______________________________________________
jboss-user mailing list
[email protected]
https://lists.jboss.org/mailman/listinfo/jboss-user

Reply via email to