注意:我找不到这个问题的直接答案,所以我将在下面记录我的解决方案作为答案。
我使用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服务
答案 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)
<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>