标签: spring-ws

有人在 SAML 身份验证中使用 Spring-ws 吗?

我们正在考虑将 spring-ws 作为实现将部署在 weblogic 上的 web 服务的平台。我们需要将 WS-Security 与我们的身份管理平台 (TFIM) 发布的 SAML 令牌一起使用。

XwsSecurityInterceptor 的 Spring-ws 文档没有提到 SAML,我不清楚是否可以在这种情况下工作。

我想替代方案可能是做我们自己的拦截器,它使用 OpenSAML 或以某种方式利用 weblogic 中的 SAML 支持。

有任何人对此有经验吗?瞄准已知可行的解决方案会很好。

spring-ws saml

5
推荐指数
1
解决办法
2642
查看次数

使用spring WebServiceTemplate和Jaxb2Marshaller时的线程安全性

我正在以编程方式将Spring WebServiceTemplate用作Web服务客户端,即不实例化弹簧容器.我正在使用Jaxb2Marshaller进行编组/解组.在我的应用程序中,我创建了一个SaajSoapMessageFactory实例和一个Jaxb2Marshaller实例.我还创建了WebServiceTemplate的单个实例,并分配了先前创建的SaajSoapMessageFactory和Jaxb2Marshaller实例.

我创建的WebServiceTemplate以多线程方式使用,即多个线程可以同时调用marshalSendAndReceive.我的问题是 - 我的配置线程安全吗?我担心Jaxb2Marshaller.javadoc说Jaxb2Marshallers不一定是线程安全的.如何在不重新初始化Jaxb上下文的情况下以线程安全的方式使用Jaxb2Marshaller?

暂且不说:在spring参考中看一下spring-ws配置示例让我相信Jaxb2Marshaller是线程安全的,但Javadoc似乎与此相矛盾.

java spring spring-ws jaxb jaxb2

5
推荐指数
1
解决办法
5794
查看次数

如何从请求中读取SOAP标头信息并将其添加到spring Web服务中的响应中

我正在研究春季网络服务.我需要在请求和响应消息中添加一些自定义元素.它应该如下所示:

<soapenv:Envelope>
   <soapenv:Header>
      <tid:SplsTID>
         <tid:Trantype>123</tid:Trantype>
         <tid:Tranver>234</tid:Tranver>
      </tid:SplsTID>
   </soapenv:Header>
   <soapenv:Body>
      <get:GetOrderNumberRequest LoggingLevel="REGULAR" MonitorFlag="Y">
         <get:Header>
            <get:TransactionId>111</get:TransactionId>
            <get:SourceSystemId>SOMS</get:SourceSystemId>
            <get:DateTime>2011-11-11T11:11:11</get:DateTime>
         </get:Header>
         <get:Body>
            <get:StaplesOrderNumber RangeFlag="N" ReleaseFlag="N">
               <get:OrderNumber Count="1" End="11" Start="9"/>
            </get:StaplesOrderNumber>
         </get:Body>
      </get:GetOrderNumberRequest>
   </soapenv:Body>
</soapenv:Envelope>
Run Code Online (Sandbox Code Playgroud)

我能够追加<tid:SplsTID><soapenv:Header>通过修改WSDL文件的请求.看起来像这样:

<wsdl:message name="GetOrderNumberRequest">
        <wsdl:part element="tns:GetOrderNumberRequest" name="GetOrderNumberRequest">
        </wsdl:part>
        <wsdl:part element="sch1:SplsTID" name="SplsTID">
        </wsdl:part>
    </wsdl:message>
    <wsdl:message name="GetOrderNumberResponse">
        <wsdl:part element="tns:GetOrderNumberResponse" name="GetOrderNumberResponse">
        </wsdl:part>
        <wsdl:part element="sch1:SplsTID" name="SplsTID">
        </wsdl:part>
    </wsdl:message>
    <wsdl:portType name="ONAS">
        <wsdl:operation name="GetOrderNumber">
            <wsdl:input message="tns:GetOrderNumberRequest" name="GetOrderNumberRequest">
            </wsdl:input>
            <wsdl:output message="tns:GetOrderNumberResponse" name="GetOrderNumberResponse">
            </wsdl:output>
        </wsdl:operation>
    </wsdl:portType>
Run Code Online (Sandbox Code Playgroud)

问题是,我想<tid:SplsTID>从请求中读取部分并希望将其附加到响应的soap标题部分,这是没有发生的.我正在使用基于注释的终点.什么是读取soap标头的代码,并在响应中附加相同的代码.

目前我的终点课是:

@Endpoint
public class OrderNumberServiceEndPoint { …
Run Code Online (Sandbox Code Playgroud)

soap web-services spring-ws soapheader

5
推荐指数
2
解决办法
3万
查看次数

从Java7上的Spring-WS客户端向Java 6上的服务器发送SOAP消息时,左尖括号被删除

这对我来说真的很令人沮丧,所以我会尝试解释我所知道的,现在不要解释.请务必在帖子底部查看我的更新.

首先,我们有一场使用Spring-WS来处理消息的战争.我们还有一个使用WebServiceTemplate发送消息的客户端.我们在Tomcat 7上部署.

在我们当前的开发环境中,Tomcat 7服务器正在使用JRE 6u24.在本地,当我使用客户端发送SOAP消息时,我正在运行相同的版本.一切都按预期工作.

当我创建本地JRE 7u04时,我得到500响应并且服务器看到以下错误:

[2012-05-05 20:19:13,179] DEBUG - org.springframework.web.servlet.FrameworkServlet.processRequest(671) | Could not complete request
org.springframework.ws.soap.saaj.SaajSoapEnvelopeException: Could not access envelope: Unable to create envelope from given source: ; nested exception is com.sun.xml.messaging.saaj.SOAPExceptionImpl: Unable to create envelope from given source:
        at org.springframework.ws.soap.saaj.SaajSoapMessage.getSaajVersion(SaajSoapMessage.java:260)
        at org.springframework.ws.soap.saaj.SaajSoapMessage.getImplementation(SaajSoapMessage.java:342)
        at org.springframework.ws.soap.saaj.SaajSoapMessage.<init>(SaajSoapMessage.java:117)
        at org.springframework.ws.soap.saaj.SaajSoapMessageFactory.createWebServiceMessage(SaajSoapMessageFactory.java:184)
        at org.springframework.ws.soap.saaj.SaajSoapMessageFactory.createWebServiceMessage(SaajSoapMessageFactory.java:58)
        at org.springframework.ws.transport.AbstractWebServiceConnection.receive(AbstractWebServiceConnection.java:90)
        at org.springframework.ws.transport.support.WebServiceMessageReceiverObjectSupport.handleConnection(WebServiceMessageReceiverObjectSupport.java:86)
        at org.springframework.ws.transport.http.WebServiceMessageReceiverHandlerAdapter.handle(WebServiceMessageReceiverHandlerAdapter.java:57)
        at org.springframework.ws.transport.http.MessageDispatcherServlet.doService(MessageDispatcherServlet.java:222)
        at org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:644)
        at org.springframework.web.servlet.FrameworkServlet.doPost(FrameworkServlet.java:560)
        at javax.servlet.http.HttpServlet.service(HttpServlet.java:641)
        at javax.servlet.http.HttpServlet.service(HttpServlet.java:722)
        at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:304)
        at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:210)
        at org.apache.catalina.core.ApplicationDispatcher.invoke(ApplicationDispatcher.java:684)
        at org.apache.catalina.core.ApplicationDispatcher.processRequest(ApplicationDispatcher.java:471)
        at org.apache.catalina.core.ApplicationDispatcher.doForward(ApplicationDispatcher.java:402)
        at org.apache.catalina.core.ApplicationDispatcher.forward(ApplicationDispatcher.java:329) …
Run Code Online (Sandbox Code Playgroud)

java soap spring-ws bytearray saaj

5
推荐指数
1
解决办法
3423
查看次数

大型 MIME 附件和 SOAP

我有一个简单的 web 服务服务器,它接收带有 MIME 附件的 SOAP,将它存储到 HashMap 并用这个 mime 附件发回消息:

如果我发送带有小附件(<80MB)的请求,一切正常,但是当我发送带有>80MB 附件的请求时,DataHandler 对象为空。所以它不是从 Request 中解析出来的,也不是存储到 HashMap 中的。我是否启用了 mimepull 无关紧要,如果是,大附件将存储到硬盘驱动器上的临时文件夹中。

启用 MimePull:

-Dsaaj.use.mimepull=true
-Djava.io.tmpdir=/path/to/tmpdir
Run Code Online (Sandbox Code Playgroud)

扩大的 GlassFish 线程池:

"Max Thread Pool Size" from 5 to 32
"Min Thread Pool Size" from 2 …
Run Code Online (Sandbox Code Playgroud)

soap spring-ws attachment jaxb2 glassfish-3

5
推荐指数
0
解决办法
1013
查看次数

java.lang.NoClassDefFoundError:org/springframework/security/authentication/AuthenticationManager

我试图通过引用以下链接在Spring Web服务上实现身份验证:

http://docs.spring.io/spring-ws/site/reference/html/security.html

以下是我添加的配置:

    <bean
        class="org.springframework.ws.server.endpoint.mapping.PayloadRootAnnotationMethodEndpointMapping">
        <property name="interceptors">
            <list>
                <ref local="wsServerSecurityInterceptor" />
                <ref local="payloadValidatingIterceptor" />
            </list>
        </property>
    </bean>
    <bean id="wsServerSecurityInterceptor"
        class="org.springframework.ws.soap.security.xwss.XwsSecurityInterceptor">
        <property name="policyConfiguration"
            value="classpath:security/xwss/security-server-policy.xml" />
        <property name="callbackHandlers">
            <list>
                <!-- <ref bean="keyStoreHandlerServer" /> -->
                <ref bean="springSecurityHandler" />
                <ref bean="callbackHandlerServer" />
            </list>
        </property>
    </bean>
    <bean id="springSecurityHandler"
      class="org.springframework.ws.soap.security.xwss.callback.SpringPlainTextPasswordValidationCallbackHandler">
    <property name="authenticationManager" ref="authenticationManager"/>
  </bean>
  <bean id="authenticationManager" class="org.springframework.security.providers.ProviderManager">
      <property name="providers">  
      <list>
    <ref local="authenticationProvider" />
    </list>        
    </property>
  </bean>
  <bean id="authenticationProvider"
   class="org.springframework.security.providers.dao.DaoAuthenticationProvider">
              <property name="userDetailsService" ref="userDetailsService"/>
          </bean>  
   <bean id="userDetailsService" class="com.impl.endpoints.calc.client.JpaUserDetailsService" /> 
Run Code Online (Sandbox Code Playgroud)

在服务器上部署war文件时,出现以下错误:

Exception sending context initialized event to listener …
Run Code Online (Sandbox Code Playgroud)

java spring spring-ws spring-security

5
推荐指数
1
解决办法
2万
查看次数

我可以将 DeferredResult 与 spring-ws 一起使用吗?

有没有办法用 spring-ws 执行正确的异步请求处理?

执行此操作的“正常”Spring 方式(即从控制器操作返回 Callable 或 DeferredResult)不适用于 spring-ws。

具体来说,spring-ws 抛出一个带有消息的 SoapMessageDispatcher 异常

No adapter for endpoint [public org.springframework.web.context.request.async.DeferredResult<org.w3c.dom.Element> 
Run Code Online (Sandbox Code Playgroud)

(当 T 是 org.w3c.dom.Element 时)

如果 DeferredResult/Callable 不是 spring-ws 的选项,那么我有哪些选项?

java spring asynchronous spring-ws

5
推荐指数
0
解决办法
371
查看次数

没有XSD的Spring WS

我试图在Spring和没有任何XSD的Spring WS中创建简单的WS项目。部署在码头上。可以仅从Java类填充WS端点并生成WSDL(没有静态XSD或WSDL-我经历了很多教程,但都需要使用)。

对于任何帮助,提示或链接表示高度赞赏。

我有这样的事情:

1)要求

@XmlRootElement
public class MessageWSRequest {

@XmlElement
private String message;

public String getMessage() {
    return message;
}

public void setMessage(String message) {
    this.message = message;
}
}
Run Code Online (Sandbox Code Playgroud)

2)端点

@Endpoint
public class MessageWS {
@PayloadRoot(namespace = "http://message.com/ws/message" ,localPart="MessageWSRequest")
public String handleMathServiceRequest(@RequestPayload MessageWSRequest messageWSRequest) {
    return "ok";
}
}
Run Code Online (Sandbox Code Playgroud)

3)springContext.xml

<sws:annotation-driven/>
<context:component-scan base-package="com.ws.message"/>
Run Code Online (Sandbox Code Playgroud)

4)web.xml

<servlet>
    <servlet-name>webservices</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>
    <init-param>
        <param-name>contextConfigLocation</param-name>
        <param-value></param-value>
    </init-param>
    <load-on-startup>1</load-on-startup>
</servlet>

<servlet-mapping>
    <servlet-name>webservices</servlet-name>
    <url-pattern>*.wsdl</url-pattern>
</servlet-mapping>

<servlet-mapping>
    <servlet-name>webservices</servlet-name>
    <url-pattern>/endpoints/*</url-pattern>
</servlet-mapping>
Run Code Online (Sandbox Code Playgroud)

现在,我希望 使用生成的WSDL 这样的URL,例如 …

java spring web-services spring-ws

5
推荐指数
1
解决办法
4148
查看次数

Spring WS 是否符合 JAX-WS

Spring WS 是否符合 JAX-WS?更详细地说,

  • Spring-WS 是否根据 JAX-WS 标准提供特性?
  • Spring-WS 是否涵盖了 JAX-WS 中指定的所有功能?

问题背景: 我们正在尝试开发多个 Web 服务。在开始这些项目之前,我们希望为 Web 服务提出标准框架。所以我们想坚持一种 WS 实现,Spring WS 或 JAX-WS。根据研究,我发现了有关这两种实现的许多细节(如下所述)。尽管Spring WS项目中没有正式提到它遵循JAX-WS,但我想知道它是否仍然抱怨JAX-WS标准。

几个已知的事实:

“Spring 仅支持契约优先 WSDL 进行编码” VS “JAX-WS 同时提供 Code-WSDL、WSDL-Code”

“在 Spring WS 中,传入请求在 XML 消息请求级别(灵活性)处理”与“传入请求作为方法调用处理”。

Spring WS 标准(链接

  • SOAP 1.1 和 1.2
  • WSDL 1.1 和 2.0(仅 WSDL 1.1 支持基于 XSD 的生成)
  • WS-I 基本配置文件 1.0、1.1、1.2 和 2.0
  • WS-Addressing 1.0 和 2004 年 8 月的草案
  • SOAP 消息安全 1.1、用户名令牌配置文件 1.1、X.509 证书令牌配置文件 1.1、SAML 令牌配置文件 1.1、Kerberos 令牌配置文件 1.1、基本安全配置文件 …

java spring soap web-services spring-ws

5
推荐指数
0
解决办法
828
查看次数

Websphere PARENT_LAST 给出加载 webapp 失败的异常

我在 Websphere 部署中使用PARENT_LAST。但是,我收到异常:无法加载 webapp: javax.servlet.ServletContainerInitializer: Provider org.springframework.web.SpringServletContainerInitializer not a subtype。

我错过了什么吗?

[3/25/18 19:10:50:512 EDT] 00000078 SystemErr     R com.ibm.ws.exception.RuntimeWarning: com.ibm.ws.webcontainer.exception.WebAppNotLoadedException: Failed to load webapp: Failed to load webapp: javax.servlet.ServletContainerInitializer: Provider org.springframework.web.SpringServletContainerInitializer not a subtype
Run Code Online (Sandbox Code Playgroud)
    Caused by: java.util.ServiceConfigurationError: javax.servlet.ServletContainerInitializer: Provider org.springframework.web.SpringServletContainerInitializer not a subtype
[3/25/18 19:10:50:524 EDT] 00000078 SystemErr     R     at java.util.ServiceLoader.fail(ServiceLoader.java:242)
[3/25/18 19:10:50:524 EDT] 00000078 SystemErr     R     at java.util.ServiceLoader.access$300(ServiceLoader.java:192)
[3/25/18 19:10:50:524 EDT] 00000078 SystemErr     R     at java.util.ServiceLoader$LazyIterator.next(ServiceLoader.java:380)
[3/25/18 19:10:50:524 EDT] 00000078 SystemErr     R     at java.util.ServiceLoader$1.next(ServiceLoader.java:456)
[3/25/18 19:10:50:524 EDT] 00000078 …
Run Code Online (Sandbox Code Playgroud)

websphere spring spring-ws spring-mvc maven

5
推荐指数
1
解决办法
5312
查看次数