【发布时间】:2012-09-10 23:02:46
【问题描述】:
我希望这个问题非常简单,只是我是个白痴。我是 SOAP 新手,正在尝试设置 SOAP WebService(使用 Java 和 Spring),然后使用 SoapUI 工具尝试向我的 Web 服务发送 SOAP 请求。但是,当我提交请求时,我总是收到 404 Not Found 错误。我怀疑/希望我刚刚在 SoapUI 中错误地设置了我的端点,但我不知道我应该在那里设置什么值。有人可以帮忙吗?
这些是我为设置支持 SOAP 的 WebApp 所采取的步骤:
1) 我正在使用在 Spring Tool Suite(基于 Eclipse)中运行并使用 Jetty 的现有 WebApp(具有现有 REST Web 服务)。在我的 web.xml 文件中,我添加了一个新的 SOAP Web 服务:
<servlet-mapping>
<servlet-name>SOAPWebService</servlet-name>
<url-pattern>/ws/SOAP/*</url-pattern>
</servlet-mapping>
<servlet>
<servlet-name>SOAPWebService</servlet-name>
<servlet-class>org.springframework.ws.transport.http.MessageDispatcherServlet</servlet-class>
<init-param>
<param-name>transformWsdlLocations</param-name>
<param-value>true</param-value>
</init-param>
<load-on-startup>1</load-on-startup>
</servlet>
2) 我创建了一个新类“ProjectSearchEndpoint”,它具有@Endpoint 的注释。负载根 = @PayloadRoot(namespace = "http://FOO.FOO/foo", localPart = "ProjectRequest")
3) 我将 DSD 添加到我的 WebApp 的 WEB-INF 中:ws-project.xsd
4) 我创建了一个名为:SOAPWebService-servlet.xml 的 servlet XML 文件,它引用了 DSD
<bean id="projectSearch" class="org.springframework.ws.wsdl.wsdl11.DefaultWsdl11Definition">
<property name="schema" ref="schema"/>
<property name="portTypeName" value="ProjectSearch"/>
</bean>
<bean id="schema" class="org.springframework.xml.xsd.SimpleXsdSchema">
<property name="xsd" value="/WEB-INF/ws-project.xsd"/>
</bean>
注意:端点代码和DSD来自博客: http://javaclue.blogspot.co.uk/2012/05/soap-web-service-using-spring-ws-20.html 我编辑了命名空间以使其成为“http://FOO.FOO/foo”,但除此之外,代码是相同的,尽管我添加了 System.out 行来显示对象的构建时间(它是)和当调用“searchProjects”方法时(从来没有)。
我可以成功启动我的 webApp,如果在我的浏览器中我导航到 URL:
http://localhost:8080/MyApp/ws/SOAP/projectSearch.wsdl
我看到了 WSDL。到目前为止一切都很好。
当我使用 SoapUI 时,我会创建一个新项目并传入 WSDL。 SoapUI 似乎很高兴。我请求一个请求,SoapUI 创建了一个带有我的 ProjectRequest 的 Soap Envelope。一切进展顺利!然而,要提交这个请求,SoapUI 需要一个 Endpoint。我认为我的终点是:
http://localhost:8080/MyApp/ws/SOAP/
但这只是返回 404 not found。尝试其他组合,例如
http://localhost:8080/MyApp/ws/SOAP/projectSearch
http://localhost:8080/MyApp/ws/SOAP/projectSearch?wsdl
http://localhost:8080/MyApp/ws/SOAP/ProjectRequest
所有结果都是 404。我的端点是什么?我应该为 SoapUI 赋予什么价值?
更新 1
为了清楚起见,这是我在soapUI中所做的
启动soapUI 后,我创建了一个“新soapUI 项目”。名字是A1。初始 WSDL 是:
http://localhost:8080/MyApp/ws/SOAP/projectSearch.wsdl
还在对话框中勾选了“创建请求”。
我单击“确定”,它创建了一个 ProjectSearchSoap11(旁边有一个绿色的 I 图标),它下面有一个项目(红色箭头图标)和那个“Request1”(图标是 SOAP)。我右键单击 Request1 并选择“显示请求编辑器”。这将显示一个带有 SOAP 信封以及我的命名空间和 ProjectRequest 的窗口。这一切看起来都不错。
我现在想单击“向指定的端点 URL 提交请求”(左上角的绿色箭头),但在我指定端点(在右侧)之前它是灰色的。我单击端点下拉菜单并选择“编辑当前”。出现一个对话框。我输入:
http://localhost:8080/MyApp/ws/SOAP/
然后单击确定。现在运行图标已启用(绿色)。单击此图标会导致出现“响应”窗口,该窗口为空白,但原始数据为:
HTTP/1.1 404 Not Found
Content-Length: 0
Server: Jetty(6.1.26)
我猜我选择的端点是错误的。您能否确认这是错误的格式,或者我缺少某种后缀。如果您认为它是正确的,那么一定是我在 Web 应用程序上的设置有问题。
谢谢,
菲尔
【问题讨论】:
标签: java spring web-applications soap soapui