我正在使用jdbcTemplate.queryForList以下列方式执行命名查询:
List<Conversation> conversations = jdbcTemplate.queryForList(
SELECT_ALL_CONVERSATIONS_SQL_FULL,
new Object[] {userId, dateFrom, dateTo});
Run Code Online (Sandbox Code Playgroud)
SQL查询是:
private final String SELECT_ALL_CONVERSATIONS_SQL_FULL =
"select conversation.conversationID, conversation.room, " +
"conversation.isExternal, conversation.startDate, " +
"conversation.lastActivity, conversation.messageCount " +
"from openfire.ofconversation conversation " +
"WHERE conversation.conversationid IN " +
"(SELECT conversation.conversationID " +
"FROM openfire.ofconversation conversation, " +
"openfire.ofconparticipant participant " +
"WHERE conversation.conversationID = participant.conversationID " +
"AND participant.bareJID LIKE ? " +
"AND conversation.startDate between ? AND ?)";
Run Code Online (Sandbox Code Playgroud)
但是,当以下列方式提取列表的内容时:
for (Conversation conversation : conversations) {
builder.append(conversation.getId());
builder.append(","); …Run Code Online (Sandbox Code Playgroud) 基本上,有一个后端应用程序可以公开SOAP和RESTful服务.
我已决定将Spring WS 1.5.8用于SOAP服务,并将
Spring MVC 3.0用于RESTful服务,因为这是一项新功能.
在阅读了一些关于Spring WS(我是新手!)之后,我们在Spring WS的web.xml中声明了一个"MessageDispatcherServlet",它是一个前端控制器.
对于Spring MVC,我们应该在web.xml中声明一个"DispatcherServlet",它也是一个前端控制器.
对于这两个servlet,我们在web.xml中有不同的servlet声明.
即对于Spring WS我有
<servlet>
<servlet-name>springsoap</servlet-name>
<servlet-class>org.springframework.ws.transport.http.MessageDispatcherServlet</servlet-class>
<load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>springsoap</servlet-name>
<url-pattern>/soapservices/*</url-pattern>
</servlet-mapping>
Run Code Online (Sandbox Code Playgroud)
对于Spring MVC(RESTful),我有
<servlet>
<servlet-name>springmvc</servlet-name>
<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
<load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>springmvc</servlet-name>
<url-pattern>/restservices/*</url-pattern>
</servlet-mapping>
Run Code Online (Sandbox Code Playgroud)
因此我应该使用2个配置文件?? 一个名为springmvc-servlet.xml,另一个名为springsoap-servlet.xml?
可以这样做吗?
我正在努力使用带有JMS示例的Spring-WS.我按照Spring的建议设置了Spring-WS和JMS接线.但我一直得到以下错误.我不知道如何绕过这个问题,任何帮助将不胜感激:
[org.springframework.ws.soap.server.endpoint.SoapFaultAnnotationExceptionResolver] -
Resolving exception from endpoint
[org.springframework.ws.samples.mtom.ws.ImageRepositoryEndpoint@1c8b0b1]:
java.lang.IllegalStateException: No adapter for endpoint
[org.springframework.ws.samples.mtom.ws.ImageRepositoryEndpoint@1c8b0b1]:
Is your endpoint annotated with @Endpoint, or does it implement a supported interface like MessageHandler or PayloadEndpoint?
[org.springframework.ws.soap.server.endpoint.SimpleSoapExceptionResolver] - Resolving exception from endpoint
[org.springframework.ws.samples.mtom.ws.ImageRepositoryEndpoint@1c8b0b1]:
java.lang.IllegalStateException: No adapter for endpoint [org.springframework.ws.samples.mtom.ws.ImageRepositoryEndpoint@1c8b0b1]:
Is your endpoint annotated with @Endpoint, or does it implement a supported interface like MessageHandler or PayloadEndpoint?
[org.springframework.ws.soap.server.SoapMessageDispatcher] -
Endpoint invocation resulted in exception - responding with Fault
java.lang.IllegalStateException: No adapter for endpoint [org.springframework.ws.samples.mtom.ws.ImageRepositoryEndpoint@1c8b0b1]:
Is your …Run Code Online (Sandbox Code Playgroud) 你能不能帮助我了解spring-boot-starter-web VS spring-boot-starter-web-services VS spring-boot-starter-jersey之间的区别
文档说Starter用于使用JAX-RS和Jersey构建RESTful Web应用程序.spring-boot-starter-web的替代品
谢谢
我们希望在Web服务端点中启用有效负载的直接流式传输.我们必须处理大量数据,并希望在处理时传输数据.
我们在版本2.0.0中使用spring-ws-core并使用PayloadRootQNameEndpointMappingas endpoint mapper.作为消息工厂,我们正在使用AxiomSoapMessageFactory.我们实现了StreamingPayload相应的writeTo(XMLStreamWriter writer)方法,我们用它来编写有效载荷(根据spring-ws JIRA票证,SWS-352).
这没有任何错误,但我们想直接流!这显然是不可能的.我们做了一个简单的测试,我们流式传输一些数据以评估行为.
writer.writeStartElement("exampleResponse")
10000.times
{
writer.writeStartElement("example")
writer.writeEndElement()
}
writer.writeEndElement()
Run Code Online (Sandbox Code Playgroud)
我们假设这将直接流式传输到使用者/客户端,因此soap头已经写入我们的编写器并在端点完成后关闭.不幸的是,这是不可能的,流不能直接使用!流被包裹在一个ByteArrayInputStream,在spring-ws源中找到.
执行StreamingOMDataSource显示此(可以在SpringEye中查看).该StreamingOMDataSource呼叫你的StreamingPayload实现和给你一个作家这一点.
public XMLStreamReader getReader() throws XMLStreamException {
ByteArrayOutputStream bos = new ByteArrayOutputStream();
serialize(bos, null);
ByteArrayInputStream bis = new ByteArrayInputStream(bos.toByteArray());
return StAXUtils.createXMLStreamReader(bis);
}
Run Code Online (Sandbox Code Playgroud)
该方法#serialize()创建XMLStreamWriter与ByteArrayOutputStream并调用有效载荷,能写入,如上所述.
public void serialize(OutputStream output, OMOutputFormat format)
throws XMLStreamException
{
XMLStreamWriter streamWriter;
if ([...]) {
// Create stream writer …Run Code Online (Sandbox Code Playgroud) 我必须使用Spring WS实现Web服务客户端.
我已经阅读了http://static.springsource.org/spring-ws/site/reference/html/client.html上的文档,但我不清楚扩展WebServiceGatewaySupport与直接WebServiceTemplate在我的服务类中使用有什么好处.
据我所知,从源代码可以看出,WebServiceGatewaySupport只有一些包装器方法可以用于WebServiceTemplate初始化和一些初始化支持.
那我为什么要扩展WebServiceGatewaySupport而不是直接使用WebServiceTemplate?
谢谢!
我正在使用Spring-WS调用SOAP Web服务.有问题的webservice要求我在SOAP头中传递一些信息,如下所示:
<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/">
<soapenv:Header>
<CustomHeaderElement>
<clientID>xyz</clientID>
<wsdlVersion>1.0</wsdlVersion>
<serviceType>ExampleService_v1</serviceType>
</CustomHeaderElement>
</soapenv:Header>
<soapenv:Body>
...
</soapenv:Body>
</soapenv:Envelope>
Run Code Online (Sandbox Code Playgroud)
我已经弄清楚如何使用顶级CustomHeaderElement,但我没有在Spring-WS API中看到任何允许我添加子元素的内容.这是我到目前为止:
WebServiceTemplate template = ...;
template.marshalSendAndReceive(request, new WebServiceMessageCallback(){
public void doWithMessage(WebServiceMessage message) throws IOException, TransformerException{
SoapMessage soapMessage = (SoapMessage)message;
SoapHeader soapHeader = soapMessage.getSoapHeader();
QName qName = new QName("CustomHeaderElement");
SOAPHeaderElement headerElement = soapHeader.addHeaderElement(qName);
//would like to do something like headerElement.addChild(clientIdNode);
}
});
Run Code Online (Sandbox Code Playgroud)
问题是headerElement似乎没有暴露任何实际添加子的方法.我知道我可以添加一个属性,但这不是我需要的服务调用.有谁知道如何将必要的子元素添加到我的自定义标题?
我有客户端提供的WSDL和模式文件.我需要使用此WSDL文件创建Spring-boot SOAP Web服务.我有谷歌它和我能找到的所有例子,他们用spring自动生成wsdl.我如何使用我的WSDL生成SOAP服务?
我正在发送SOAP请求,服务器抱怨SOAPAction标头为空.我想我做对了,但显然我不是.Wireshark显示它没有设置.
@Test
public void testLogin() throws Exception {
StringBuffer loginXml = new StringBuffer();
loginXml.append("<soapenv:Envelope xmlns:soapenv=\"http://www.w3.org/2003/05/soap-envelope\" xmlns:ns=\"http://example.com/xyz/2010/08\">");
loginXml.append(" <soapenv:Header>");
loginXml.append(" <ns:loginOperationDetails>");
loginXml.append(" </ns:loginOperationDetails>");
loginXml.append(" </soapenv:Header>");
loginXml.append(" <soapenv:Body>");
loginXml.append(" <ns:LogIn>");
loginXml.append(" <ns:logInInfo>");
loginXml.append(" <ns:CustomerAccountId>customer1</ns:CustomerAccountId>");
loginXml.append(" <ns:Username>JDoe</ns:Username>");
loginXml.append(" <ns:Password>abc123</ns:Password>");
loginXml.append(" </ns:logInInfo>");
loginXml.append(" </ns:LogIn>");
loginXml.append(" </soapenv:Body>");
loginXml.append("</soapenv:Envelope>");
WebServiceTemplate webServiceTemplate = new WebServiceTemplate();
MessageFactory msgFactory = MessageFactory.newInstance(SOAPConstants.SOAP_1_2_PROTOCOL);
SaajSoapMessageFactory newSoapMessageFactory = new SaajSoapMessageFactory(msgFactory);
webServiceTemplate.setMessageFactory(newSoapMessageFactory);
String uri = "http://xyz.example.com/xyz_1.0/membership.svc/ws";
webServiceTemplate.setDefaultUri(uri);
StreamSource source = new StreamSource(new StringReader(loginXml.toString()));
StreamResult result = new StreamResult(System.out);
boolean resultReturned = false;
try { …Run Code Online (Sandbox Code Playgroud) 我使用Spring创建了一个Web服务.在我的嵌入式tomcat服务器上运行它时工作正常.但是,当我将其打包为JAR文件并使用java -jar命令运行它时,我收到此异常.
我的服务发送一个简单的soap请求,服务器响应是:
"exception": "java.lang.NoClassDefFoundError",
"message": "javax/xml/soap/SOAPException",
Run Code Online (Sandbox Code Playgroud)
这是我在邮差中得到的回应.
任何我可以寻找问题的想法.
spring-ws ×10
java ×5
soap ×5
spring ×3
spring-boot ×2
header ×1
jdbctemplate ×1
jms ×1
saaj ×1
soap-client ×1
spring-mvc ×1
spring-web ×1
streaming ×1
xml ×1