Soap-在不同的类中支持相同的函数名?

Soap-在不同的类中支持相同的函数名?,soap,wsdl,jax-ws,axis2,Soap,Wsdl,Jax Ws,Axis2,我目前的任务是为各种服务器重新设计Web服务层 在Websphere(8.5.5.9-使用axis2 afaik)或Tomcat(7使用com.sun.xml.ws:jaxws-rt)上,如果@WebService类具有与另一个类同名的@WebMethod,则服务将无法工作。在JBoss(EAP 6.2)上,它可以正常工作 是否有人知道此问题的解决方法/原因(最好是不涉及重命名方法的方法) 示例代码 编辑1 在Websphere上,服务是自动检测的,在Tomcat上,它们使用sun-jaxws.

我目前的任务是为各种服务器重新设计Web服务层

Websphere(8.5.5.9-使用axis2 afaik)或Tomcat(7使用com.sun.xml.ws:jaxws-rt)上,如果
@WebService
类具有与另一个类同名的
@WebMethod
,则服务将无法工作。在JBoss(EAP 6.2)上,它可以正常工作

是否有人知道此问题的解决方法/原因(最好是不涉及重命名方法的方法)

示例代码 编辑1 在Websphere上,服务是自动检测的,在Tomcat上,它们使用sun-jaxws.xml绑定到单独的端点

我看到的行为是:

  • 部署工作正常(无错误、无警告)
  • 两个服务都是可访问的(wsdl被发布)
  • 其中一个服务在使用时会报告错误(例如使用SoapUI)
  • 其他服务将按预期工作
编辑2 sun-jaxws.xml:


您是否遇到部署错误,或者这两个服务中只有一个可用?这似乎是应用服务器的错误行为。您是在web.xml中声明web服务(验证它们是否有单独的servlet映射)还是使用自动检测?嗨,Willem,我编辑了这个问题。在JBoss EAP和IBM WS上,服务是自动检测的,在Tomcat上,我使用sun-jaxws.xml绑定端点(单独的地址是)。您能粘贴sun-jaxws.xml并返回SOAP错误吗?您还可以尝试将@SchemaValidation添加到web服务中,以查看采用哪个模式进行输入验证。当然,请参阅我的编辑#2,添加了匹配的堆栈跟踪,因为soap错误有点。。。没有信息。我也尝试过@SchemaValidation,但我不仅看不出有什么不同,我也看不到有人提到它将被验证?这可能是问题所在吗?
// example class one
@WebService(name = "ServiceOne", targetNamespace = "http://serviceone.namespace/", serviceName = "ServiceOne")
public class ServiceOne {

  @WebMethod
  public ServiceOneResponse echo(final ServiceOneRequest request) {
    String echo = request.getPayload();

    ServiceOneResponse resp = new ServiceOneResponse();
    resp.setPayload("ServiceOne echo: " + echo);

    return resp;
  }
}

// example class two
@WebService(name = "ServiceTwo", targetNamespace = "http://ServiceTwo.namespace/", serviceName = "ServiceTwo")
public class ServiceTwo {

  @WebMethod
  public ServiceTwoResponse echo(final ServiceTwoRequest request) {
    String echo = request.getPayload();

    ServiceTwoResponse resp = new ServiceTwoResponse();
    resp.setPayload("ServiceTwo echo: " + echo);

    return resp;
  }
}

// request class one
@XmlRootElement(namespace = "http://serviceone.request/")
@XmlAccessorType(XmlAccessType.FIELD)
@XmlType(namespace = "http://serviceone.request/")
public class ServiceOneRequest {

  String payload;

  public String getPayload() {
    return payload;
  }

  public void setPayload(final String payload) {
    this.payload = payload;
  }
}

// request class two
@XmlRootElement(namespace = "http://servicetwo.request/")
@XmlAccessorType(XmlAccessType.FIELD)
@XmlType(namespace = "http://servicetwo.request/")
public class ServiceTwoRequest {

  String payload;

  public String getPayload() {
    return payload;
  }

  public void setPayload(final String payload) {
    this.payload = payload;
  }
}
<?xml version="1.0" encoding="UTF-8"?>
<endpoints xmlns="http://java.sun.com/xml/ns/jax-ws/ri/runtime"
    version="2.0">
    <endpoint name="ServiceOne"
        implementation="com.dsw.services.soap.ServiceOne"
        url-pattern="/soap/one" />
    <endpoint name="ServiceTwo"
        implementation="com.dsw.services.soap.ServiceTwo"
        url-pattern="/soap/two"/>
</endpoints>
<S:Envelope xmlns:S="http://schemas.xmlsoap.org/soap/envelope/">
   <S:Body>
      <S:Fault xmlns:ns4="http://www.w3.org/2003/05/soap-envelope">
         <faultcode>S:Server</faultcode>
         <faultstring>argument type mismatch</faultstring>
      </S:Fault>
   </S:Body>
</S:Envelope>
Apr 13, 2016 10:30:47 AM com.sun.xml.ws.server.sei.TieHandler createResponse
SEVERE: argument type mismatch
java.lang.IllegalArgumentException: argument type mismatch
  at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
  at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
  at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
  at java.lang.reflect.Method.invoke(Unknown Source)
  at sun.reflect.misc.Trampoline.invoke(Unknown Source)
  at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
  at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
  at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
  at java.lang.reflect.Method.invoke(Unknown Source)
  at sun.reflect.misc.MethodUtil.invoke(Unknown Source)
  at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
  at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
  at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
  at java.lang.reflect.Method.invoke(Unknown Source)
  at com.sun.xml.ws.api.server.MethodUtil.invoke(MethodUtil.java:83)
  at com.sun.xml.ws.api.server.InstanceResolver$1.invoke(InstanceResolver.java:250)
  at com.sun.xml.ws.server.InvokerTube$2.invoke(InvokerTube.java:149)
  at com.sun.xml.ws.server.sei.SEIInvokerTube.processRequest(SEIInvokerTube.java:88)
  at com.sun.xml.ws.api.pipe.Fiber.__doRun(Fiber.java:1136)
  at com.sun.xml.ws.api.pipe.Fiber._doRun(Fiber.java:1050)
  at com.sun.xml.ws.api.pipe.Fiber.doRun(Fiber.java:1019)
  at com.sun.xml.ws.api.pipe.Fiber.run(Fiber.java:813)
  at com.sun.xml.ws.api.pipe.Fiber.start(Fiber.java:420)
  at com.sun.xml.ws.server.WSEndpointImpl.processAsync(WSEndpointImpl.java:368)
  at com.sun.xml.ws.server.WSEndpointImpl.process(WSEndpointImpl.java:398)
  at com.sun.xml.ws.transport.http.HttpAdapter.invokeAsync(HttpAdapter.java:734)
  at com.sun.xml.ws.transport.http.servlet.ServletAdapter.invokeAsync(ServletAdapter.java:212)
  at com.sun.xml.ws.transport.http.servlet.WSServletDelegate.doGet(WSServletDelegate.java:161)
  at com.sun.xml.ws.transport.http.servlet.WSServletDelegate.doPost(WSServletDelegate.java:197)
  at com.sun.xml.ws.transport.http.servlet.WSServlet.doPost(WSServlet.java:81)
  at javax.servlet.http.HttpServlet.service(HttpServlet.java:647)
  at javax.servlet.http.HttpServlet.service(HttpServlet.java:728)
  at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:305)
  at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:210)
  at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:222)
  at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:123)
  at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:502)
  at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:171)
  at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:99)
  at org.apache.catalina.valves.AccessLogValve.invoke(AccessLogValve.java:953)
  at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:118)
  at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:408)
  at org.apache.coyote.http11.AbstractHttp11Processor.process(AbstractHttp11Processor.java:1023)
  at org.apache.coyote.AbstractProtocol$AbstractConnectionHandler.process(AbstractProtocol.java:589)
  at org.apache.tomcat.util.net.AprEndpoint$SocketProcessor.run(AprEndpoint.java:1852)
  at java.util.concurrent.ThreadPoolExecutor.runWorker(Unknown Source)
  at java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source)
  at java.lang.Thread.run(Unknown Source)