如何将对象添加到a的soap标头中 org.springframework.ws.WebServiceMessage
这是我希望最终得到的结构:
<soap:Header>
<credentials xmlns="http://example.com/auth">
<username>username</username>
<password>password</password>
</credentials>
</soap:Header>
Run Code Online (Sandbox Code Playgroud) Spring-WS生成WSDL而没有绑定标记中的操作......你知道为什么吗?
有我的spring-ws-service.xml:
<import resource="classpath*:application-context.xml" />
<!-- Register PayloadRootAnnotationMethodEndpointMapping -->
<bean class="org.springframework.ws.server.endpoint.mapping.PayloadRootAnnotationMethodEndpointMapping" />
<!-- Register Endpoint -->
<bean id="tasktablerServiceEndpoint" class="tasktabler.mpk.service.TasktablerServiceEndpoint" />
<!-- Configure XML Marshaller -->
<bean class="org.springframework.ws.server.endpoint.adapter.GenericMarshallingMethodEndpointAdapter">
<constructor-arg ref="marshaller" />
</bean>
<bean id="marshaller" class="org.springframework.oxm.jaxb.Jaxb2Marshaller">
<property name="classesToBeBound">
<list>
<value>tasktabler.mpk.databinding.OptimizeRequest</value>
</list>
</property>
</bean>
<!-- Add automatic WSDL generation support -->
<bean id="tasktabler" class="org.springframework.ws.wsdl.wsdl11.DefaultWsdl11Definition">
<property name="schema" ref="schema" />
<property name="portTypeName" value="tasktabler" />
<property name="locationUri" value="http://localhost:8080/tasktabler" />
<property name="targetNamespace" value="http://tasktabler" />
</bean>
<bean id="schema" class="org.springframework.xml.xsd.SimpleXsdSchema">
<property name="xsd" value="/WEB-INF/schema.xsd" />
</bean>
Run Code Online (Sandbox Code Playgroud)
并且有WSDL的wsdl绑定部分:
<wsdl:binding name="tasktablerSoap11" type="tns:tasktabler"> …Run Code Online (Sandbox Code Playgroud) 我正在使用Spring Web Services将服务公开为Web服务.在我的spring配置xml文件中,我有一个bean,它是DefaultWsdl11Definition的一个实例.需要设置的属性之一是locationUri.这需要是一个完全合格的Uri,但是当应用程序从dev升级到uat和生产时,我不想更改此值.Spring知道Web应用程序上下文根是什么,所以我可以在配置文件中指定一个变量来访问它吗?
就像是:
<bean id="myWebServices"
class="org.springframework.ws.wsdl.wsdl11.DefaultWsdl11Definition">
<property name="schemaCollection">
<bean
class="org.springframework.xml.xsd.commons.CommonsXsdSchemaCollection">
<property name="xsds" ref="xsdList"/>
<property name="inline" value="true" />
</bean>
</property>
<property name="portTypeName" value="myWebServices" />
<property name="locationUri" value="${webContextRoot}/webServices" />
</bean>
Run Code Online (Sandbox Code Playgroud) 我只是无法使用Spring Web Services弄清楚这个错误.我相信我做的一切都正确.
肥皂错误响应
<SOAP-ENV:Envelope xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/">
<SOAP-ENV:Header/>
<SOAP-ENV:Body>
<SOAP-ENV:Fault>
<faultcode>SOAP-ENV:Server</faultcode>
<faultstring xml:lang="en">No adapter for endpoint [public void org.imsglobal.www.services.lis.pms2p0.wsdl11.sync.imspms_v2p0.PersonManagerSyncSoapBindingImpl.readPerson(org.imsglobal.www.services.lis.pms2p0.wsdl11.sync.imspms_v2p0.ReadPersonRequest,org.imsglobal.www.services.lis.pms2p0.wsdl11.sync.imspms_v2p0.Imsx_RequestHeaderInfoType,org.imsglobal.www.services.lis.pms2p0.wsdl11.sync.imspms_v2p0.holders.ReadPersonResponseHolder,org.imsglobal.www.services.lis.pms2p0.wsdl11.sync.imspms_v2p0.holders.Imsx_ResponseHeaderInfoTypeHolder)]: Is your endpoint annotated with @Endpoint, or does it implement a supported interface like MessageHandler or PayloadEndpoint?</faultstring>
</SOAP-ENV:Fault>
Run Code Online (Sandbox Code Playgroud)
注释
@Endpoint
public class PersonManagerSyncSoapBindingImpl implements org.imsglobal.www.services.lis.pms2p0.wsdl11.sync.imspms_v2p0.PersonManagerSyncPortType{
@PayloadRoot(localPart = "readPersonRequest", namespace = "http://www.imsglobal.org/services/lis/pms2p0/wsdl11/sync/imspms_v2p0")
@ResponsePayload
public void readPerson(@RequestPayload org.imsglobal.www.services.lis.pms2p0.wsdl11.sync.imspms_v2p0.ReadPersonRequest parameters, org.imsglobal.www.services.lis.pms2p0.wsdl11.sync.imspms_v2p0.Imsx_RequestHeaderInfoType headerInfoParameters, @RequestPayload org.imsglobal.www.services.lis.pms2p0.wsdl11.sync.imspms_v2p0.holders.ReadPersonResponseHolder response, @RequestPayload org.imsglobal.www.services.lis.pms2p0.wsdl11.sync.imspms_v2p0.holders.Imsx_ResponseHeaderInfoTypeHolder headerInfoResponse) {
response.value = new org.imsglobal.www.services.lis.pms2p0.wsdl11.sync.imspms_v2p0.ReadPersonResponse();
headerInfoResponse.value = new org.imsglobal.www.services.lis.pms2p0.wsdl11.sync.imspms_v2p0.Imsx_ResponseHeaderInfoType();
}
Run Code Online (Sandbox Code Playgroud)
弹簧-WS-servlet.xml中
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" …Run Code Online (Sandbox Code Playgroud) 我使用SpringWS作为我的soap服务并像这样验证它;
<sws:interceptors>
<bean id="payloadValidatingInterceptor" class="org.springframework.ws.soap.server.endpoint.interceptor.PayloadValidatingInterceptor">
<property name="schema" value="/schemas/my.xsd"/>
<property name="validateRequest" value="false"/>
<property name="validateResponse" value="true"/>
</bean>
Run Code Online (Sandbox Code Playgroud)
@PayloadRoot(namespace = NAMESPACE, localPart = "ServiceProvider")
@ResponsePayload
public ServiceProviderTxn getAccountDetails(@RequestPayload ServiceProviderrequest)
{ ...}
Run Code Online (Sandbox Code Playgroud)
这样可以正常工作,但是当出现错误时,它会在到达端点之前返回弹簧生成的错误响应,因此我从来没有机会处理它们.但我希望能够将完整的错误消息记录并保存到数据库.我发现的一种方法是在我的另一个问题中做这样的事情;
但它不能按我的意愿工作.
我能够使用Web服务发送请求javax.xml.soap.*,我想隐藏代码使用webServiceTemplate.
webServiceTemplate 结束是否有任何好处
java.xml.soap.如果我不能正确地做到这一点?鉴于我需要连接到20个Web服务.它唯一的服务findEvents如下:
<soapenv:Envelope xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:soap="http://ticketmaster.productserve.com/v2/soap.php" xmlns:soapenc="http://schemas.xmlsoap.org/soap/encoding/">
<soapenv:Header/>
<soapenv:Body>
<soap:findEvents soapenv:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/">
<request xsi:type="soap:Request">
<!--You may enter the following 7 items in any order-->
<apiKey xsi:type="xsd:string">?</apiKey>
<country xsi:type="xsd:string">?</country>
<resultsPerPage xsi:type="xsd:int">?</resultsPerPage>
<currentPage xsi:type="xsd:int">?</currentPage>
<sort xsi:type="soap:Request_Sort">
<!--You may enter the following 2 items in any order-->
<field xsi:type="xsd:string">?</field>
<order xsi:type="xsd:string">?</order>
</sort>
<filters xsi:type="soap:ArrayOfRequest_Filter" soapenc:arrayType="soap:Request_Filter[]"/>
<updatedSince xsi:type="xsd:string">?</updatedSince>
</request>
</soap:findEvents>
</soapenv:Body>
</soapenv:Envelope>
Run Code Online (Sandbox Code Playgroud)
我的代码如下:
try {
SOAPConnectionFactory soapConnectionFactory =
SOAPConnectionFactory.newInstance();
SOAPConnection …Run Code Online (Sandbox Code Playgroud) 是否可以使用java密钥库配置WebServiceTemplate?
编辑
我正在寻找一种在spring配置中配置密钥库位置的方法
我们使用PayloadRootQNameEndpointMapping(基于脚本语言如Groovy或别的东西),以给定的根映射端点脚本QName.我们最近尝试将spring ws迁移到2.0版.PayloadRootQNameEndpointMapping的javadoc 显示该类被标记为已弃用.
PayloadRootQNameEndpointMapping从Spring Web Services 2.0开始,不赞成使用PayloadRootAnnotationMethodEndpointMapping
由于注释是静态的,因此我们无法为脚本编写端点提供动态概念.到目前为止,我们可以将处理脚本端点(提供脚本文件和一些上下文)的Bean一般映射到根QName.
简:我们如何在不使用已弃用的API的情况下实现好的旧bean端点到Root QName映射?有任何想法吗?
先感谢您.
我正在尝试在Spring Tool Suite(STS)中创建一个新的Spring Web服务项目.我查看了这个链接
http://static.springsource.org/spring-ws/site/reference/html/tutorial.html
但是这并没有说清楚步骤.
任何人都可以分享链接到一些有用的资源,逐步显示如何创建一个Spring WS项目?
350赏金和华夫饼给能帮助我的人!
我一直在努力使用Spring Web Service加密几天,我无法弄清楚如何让Spring的加密功能在消息体上运行.每当我让服务器加密生成的消息时,客户端似乎在尝试根据Schema(XSD)验证它之前没有对其进行解密.
我能做的是加密用户令牌并成功解密.我在从客户端向服务器发送数据时这样做.然后,服务器解密用户令牌并验证用户凭据,这非常有效.
如果我尝试加密回来的邮件正文,就会出现问题.问题发生在客户端.似乎客户端在解密之前尝试验证消息,因此在验证模式时会发生错误.
[Fatal Error] :1:192: The prefix "ns0" for element "ns0:HolidayListResponse" is not bound.
11-Dec-2009 7:45:32 AM com.sun.xml.wss.impl.apachecrypto.DecryptionProcessor decryptElementWithCipher
SEVERE: WSS1203: Exception [ The prefix "ns0" for element "ns0:HolidayListResponse" is not bound. ] while trying to decrypt message
Run Code Online (Sandbox Code Playgroud)
这是编组映射文件
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapping PUBLIC "-//EXOLAB/Castor Mapping DTD Version 1.0//EN"
"http://castor.org/mapping.dtd">
<mapping>
<field-handler name="dateHandler" class="com.mycompany.hr.handlers.DateFieldHandler" />
<field-handler name="dateHandler2" class="com.mycompany.hr.handlers.DateFieldHandler" />
<class name="com.mycompany.hr.data.Holiday">
<map-to ns-uri="http://mycompany.com/hr/schemas" ns-prefix="ns0" xml="Holiday" …Run Code Online (Sandbox Code Playgroud) java ×10
spring-ws ×10
spring ×9
web-services ×5
contextpath ×1
security ×1
soap ×1
ssl ×1
wsdl ×1