AXIS错误:此位置没有SOAP服务

时间:2012-01-10 14:19:28

标签: web-services axis

注意:我找不到这个问题的直接答案,所以我将在下面记录我的解决方案作为答案。

我使用Axis 1.4和wsdl从wsdl生成了Web服务的服务器端部分 axistools-maven-plugin。 Axis servlet映射到/services/* ,. 服务在WEB-INF/server-config.wsdd中配置如下:

<deployment xmlns="http://xml.apache.org/axis/wsdd/"
    xmlns:java="http://xml.apache.org/axis/wsdd/providers/java">
    <service name="TestService" style="document" use="literal">
        <namespace>http://example.com/testservier</namespace>
        <parameter name="className" value="com.example.TestServiceImpl"/>
        <parameter name="allowedMethods" value="*"/>
        <parameter name="scope" value="Session"/>
    </service>
</deployment>

当我将此Web应用程序部署到Tomcat并进行访问时 http://localhost:8080/testservice/services已部署的服务列表 返回。

  

现在......一些服务

     
      
  • TestService(wsdl)   
        
    • TestService
    •   
  •   

点击wsdl应返回此服务的说明,但会产生以下错误页面:

  

AXIS错误

     

无法生成WSDL!

     

此位置没有SOAP服务

5 个答案:

答案 0 :(得分:9)

server-config.wsdd缺少必要的配置设置。

<transport name="http">
    <requestFlow>
        <handler type="java:org.apache.axis.handlers.http.URLMapper"/>
    </requestFlow>
</transport>

似乎URLMapper负责从中提取服务名称 url,没有它的轴不知道要调用哪个服务。这有点像 记录在axis faq

  

此机制有效,因为Axis中的HTTP传输在请求链上部署了URLMapper(org.apache.axis.handlers.http.URLMapper)处理程序。 URLMapper获取传入的URL,将其最后一部分作为服务名称提取,并尝试在当前EngineConfiguration中按该名称查找服务。

     

类似地,您可以部署HTTPActionHandler以通过SOAPAction HTTP标头进行分派。您也可以随意使用自定义方式设置服务 - 例如,如果您有通过单个服务汇集所有邮件的传输,则可以在传输调用AxisEngine之前在MessageContext中设置服务

这听起来像默认配置URLMapper似乎不是这样。

答案 1 :(得分:1)

当我遇到此问题时,这是由于使用了错误的网址引起的。

我使用http://localhost:8080/axis/services/AdminWebService?wsdl代替http://localhost:8080/axis/services/AdminService?wsdl

AdminWebService必须更改为AdminService

答案 2 :(得分:0)

您最好使用目标“admin”自动构建server-config.wsdd。请参阅有关此插件的文档:

http://mojo.codehaus.org/axistools-maven-plugin/admin-mojo.html

手动生成server-config.wsdd非常困难。

示例:

<build>
            <plugins>
                <plugin>
                    <groupId>org.codehaus.mojo</groupId>
                    <artifactId>axistools-maven-plugin</artifactId>
                    <version>1.3</version>

                    <configuration>

                        <filename>${project.artifactId}.wsdl</filename>
                        <namespace>http://server.ws.xxx</namespace>
                        <namespaceImpl>http://server.ws.xxx</namespaceImpl>
                        <classOfPortType>XXXWebService</classOfPortType>
                        <location>http://localhost:8080/XX/services/XXXWebService</location>
                        <bindingName>XXServiceSoapBinding</bindingName>
                        <style>WRAPPED</style>
                        <use>literal</use>


                        <inputFiles>
                            <inputFile>${basedir}\src\main\webapp\WEB-INF\xxxx\deploy.wsdd</inputFile>
                            <inputFile>${basedir}\src\main\webapp\WEB-INF\xxxx\deploy.wsdd</inputFile>
                        </inputFiles>
                    <isServerConfig>true</isServerConfig>
                <extraClasses></extraClasses>

                    </configuration>
                    <executions>
                        <execution>
                            <goals>
                                <goal>java2wsdl</goal>
                                <goal>admin</goal>
                            </goals>
                        </execution>
                    </executions>
                    <dependencies>
                        <dependency>
                            <groupId>axis</groupId>
                            <artifactId>axis</artifactId>
                            <version>1.3</version>
                        </dependency>

                    </dependencies>
                </plugin>
            </plugins>
        </build>

答案 3 :(得分:0)

我最近遇到了同样的问题。

解决方案: 就我而言,我使用的是Axis 1.4并且正在tomcat上部署应用程序。但是,由于某种原因,生成的server-config.wsdd没有在战争中打包,因此没有部署在tomcat上。有一次,我确保这种情况正在发生,它开始适合我。

答案 4 :(得分:0)

  • 你确保你的包中有server-config.wsdd,你可以将这个文件放到资源中,或者你可以通过maven在你的pom.xml中设置哪些文件将放在包中
  • server-config.wsdd必须是有效的,并且存在正确的标签或必要的配置,因此下面的行必须在其中;
<handler type="java:org.apache.axis.handlers.http.URLMapper" name="URLMapper"/>

<handler type="java:org.apache.axis.transport.local.LocalResponder" name="LocalResponder" />

<transport name="http">
    <parameter name="qs:list" value="org.apache.axis.transport.http.QSListHandler" />
    <parameter name="qs:method" value="org.apache.axis.transport.http.QSMethodHandler" />
    <parameter name="qs:wsdl" value="org.apache.axis.transport.http.QSWSDLHandler" />
    <requestFlow>
        <handler type="URLMapper" />
        <handler type="java:org.apache.axis.handlers.http.HTTPAuthHandler" />
    </requestFlow>
</transport>
<transport name="local">
    <responseFlow>
        <handler type="LocalResponder" />
    </responseFlow>
</transport>