当前位置: 首页 > 知识库问答 >
问题:

无法从给定的源创建信封

刘承悦
2023-03-14

我正在尝试使用基于SOAP的Web服务,其中包含Spring WS 2.2.2版本的org.springframework.ws.client.core.WebServiceTemplate类,如下所示:

webServiceTemplate.setDefaultUri(uri);
webServiceTemplate.setMessageSender(new SOAPMessageSenderWithAuth());
res = (RESPONSE) webServiceTemplate.marshalSendAndReceive(request);

请求是使用从Web服务的WSDL文件生成的类构建的。

Webservice已经成功地使用SOAP UI进行了测试,但是当使用Exception访问它时Java抛出了"SoapMessageCreationException:无法从InputStream创建消息:无法从给定源创建信封(SAAJ0511)"和"无法从给定源创建信封,因为根元素未命名为'Envelope'(SAAJ0514)"。

有人对这个例外有什么建议吗?

提前感谢!

WebServiceTemplate 的 Spring Bean 定义如下:

<bean id="webServiceTemplate" class="org.springframework.ws.client.core.WebServiceTemplate"
    p:marshaller-ref="jaxbMarshaller"
    p:unmarshaller-ref="jaxbMarshaller"
    p:defaultUri="...">
    <constructor-arg ref="messageFactory"/>
        <property name="messageSender">
          <bean class="org.springframework.ws.transport.http.HttpComponentsMessageSender">
              <property name="credentials">
                  <bean class="org.apache.http.auth.UsernamePasswordCredentials">
                      <constructor-arg value="..."/>
                      <constructor-arg value="..."/>
                  </bean>
              </property>
          </bean>
      </property>
    </bean>

例外情况是:

org.springframework.ws.soap.SoapMessageCreationException:无法从InputStream创建消息:无法从给定来源创建信封:;嵌套异常com.sun.xml.internal.messaging.saaj.SOAPExceptionImpl:无法从给定来源创建信封

这是使用 Spring WS 模板的 Web 服务客户端的类:

import javax.annotation.Resource;
import org.apache.log4j.Logger;
import org.springframework.ws.client.WebServiceIOException;
import org.springframework.ws.client.core.WebServiceTemplate;
import com.myproject.soap.client.services.SOAPWebServiceClient;

/**
 *
 * @param <REQUEST>
 * @param <RESPONSE>
 */
public class DefaultSOAPWebServiceClient<REQUEST, RESPONSE> implements SOAPWebServiceClient<REQUEST, RESPONSE>
{
    private final static Logger LOG = Logger.getLogger(DefaultSOAPWebServiceClient.class.getName());
    @Resource(name = "webServiceTemplate")
    private WebServiceTemplate webServiceTemplate;

    @Override
    public RESPONSE sendAndReceive(final REQUEST request, final String uri)
    {
        LOG.info("SOAP URL-" + uri);
        LOG.info("REQUEST-" + request.toString());
        RESPONSE res = null;

        try
        {
            res = (RESPONSE) webServiceTemplate.marshalSendAndReceive(uri, request);
        }
        catch (final WebServiceIOException e)
        {
            e.printStackTrace();
            LOG.error("Service with URI: " + uri + " is unreachable");
        }
        return res;
    }
}

方法sendAndAccess的调用方式如下:

public MYDATAResponse createCustomer(final MYDATA request)
    {
        return (MYDATAResponse) soapWebServiceClient.sendAndReceive((REQUEST) request, getCreateCustomerURI());
    }

共有1个答案

南宫喜
2023-03-14

如果在从服务解析响应时遇到异常,请尝试从 soap UI 发送请求并检查它是否正常工作。如果它在肥皂UI中工作而不是在这里,那么你没有得到正确的响应,这可能是因为请求不正确。在我的情况下,问题是代码中的endpointURL由“?wsdl”组成。删除后,它工作得很好。

 类似资料:
  • 问题内容: 我从来没有进入过节点,所以我很确定自己在这里做错了很多事情,因为我无法通过谷歌搜索找到任何信息。 我有一个django网站,我想要一个JS图表库,我选择了chart.js。 我安装并喜欢这些文档,但是在此之后我不确定该怎么做,因此我尝试填写空白并尽可能地遵循其指南。这是我的html看起来像.... 我只是想让一个例子起作用。我将通过npm下载的node_modules目录放在我的服务器

  • 考虑以下无向非循环图: 如果我们定义“根”为A和E,有没有算法可以确定产生的有向无环图?: 我考虑过从根开始尝试某种DFS或BFS,但我不确定如何处理“等待”的需要,以查看另一个根是否可能到达给定的节点。

  • 我正在尝试使用快速连接将JProfiler(10.0.1)连接到JMX端口- “另一个应用程序正在端口19002上运行。请检查您的端口配置”。 我使用的是oracle JDK jdk1.8.0_181。下面是我用于服务器启动的JXM选项。

  • 我正处于从iTextSharp转移到iText7的早期阶段,但很早就失败了。这是代码片段: 这将产生一个错误: 对象似乎是有效的,并且返回一个长度和返回。我已经成功地使用类似的代码来创建和写入一个PDF,但是不能从一个PDFReader对象创建一个PDF文档。我错过了一些简单的东西吗?谢谢

  • WAS版本:-7.0.0.35(64位)OS-Redhat Enterprise Linux 5.8x86_64 WebSphere MQ:-7.5 注意:-MQ和WAS服务器安装在不同的机器上。传输类型TCP is用于MQ。 WAS配置:服务器级别的Classloader策略是::Single Class loading模式是::Classes首先用父类loader加载。 应用程序级别的Clas