SoapUI模拟服务缺少操作错误

时间:2016-05-26 13:52:58

标签: soapui weblogic12c

我想为开发环境模拟Web服务。 我有 SOAPUI版本5.2.1 和以下 WSDL

<wsdl:definitions xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/" 
xmlns:http="http://schemas.xmlsoap.org/wsdl/http/" 
xmlns:mime="http://schemas.xmlsoap.org/wsdl/mime/" 
xmlns:s="http://www.w3.org/2001/XMLSchema" 
xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/" 
xmlns:soap12="http://schemas.xmlsoap.org/wsdl/soap12/" 
xmlns:soapenc="http://schemas.xmlsoap.org/soap/encoding/" 
xmlns:tm="http://microsoft.com/wsdl/mime/textMatching/" 
xmlns:tns="http://server.com/SSO" 
targetNamespace="http://server.com/SSO">
    <wsdl:documentation>Web service</wsdl:documentation>
    <wsdl:types>
        <s:schema elementFormDefault="qualified" targetNamespace="http://server.com/SSO">
            <s:element name="GetProfile2">
                <s:complexType>
                    <s:sequence>
                        <s:element maxOccurs="1" minOccurs="0" name="Token" nillable="true" type="s:string"/>
                        <s:element maxOccurs="1" minOccurs="0" name="SiteName" nillable="true" type="s:string"/>
                        <s:element maxOccurs="1" minOccurs="0" name="TimeStamp" nillable="true" type="s:string"/>
                        <s:element maxOccurs="1" minOccurs="0" name="EncodedPwd" nillable="true" type="s:string"/>
                        <s:element maxOccurs="1" minOccurs="0" name="EncodedType" nillable="true" type="s:string"/>
                        <s:element maxOccurs="1" minOccurs="0" name="Filter" nillable="true" type="s:string"/>
                    </s:sequence>
                </s:complexType>
            </s:element>
            <s:element name="GetProfile2Response">
                <s:complexType>
                    <s:sequence>
                        <s:element maxOccurs="1" minOccurs="0" name="GetProfile2Result" type="s:string"/>
                    </s:sequence>
                </s:complexType>
            </s:element>
            <s:element name="GetCache">
                <s:complexType/>
            </s:element>
            <s:element name="GetCacheResponse">
                <s:complexType>
                    <s:sequence>
                        <s:element maxOccurs="1" minOccurs="0" name="GetCacheResult" type="s:string"/>
                    </s:sequence>
                </s:complexType>
            </s:element>
            <s:element name="string" nillable="true" type="s:string"/>
        </s:schema>
    </wsdl:types>
    <wsdl:message name="GetProfile2SoapOut">
        <wsdl:part element="tns:GetProfile2Response" name="parameters">
        </wsdl:part>
    </wsdl:message>  
    <wsdl:message name="GetProfile2SoapIn">
        <wsdl:part element="tns:GetProfile2" name="parameters">
        </wsdl:part>
    </wsdl:message>
    <wsdl:portType name="ServiceSoap">
        <wsdl:operation name="GetProfile2">
            <wsdl:documentation>Returns a user</wsdl:documentation>
            <wsdl:input message="tns:GetProfile2SoapIn">
            </wsdl:input>
            <wsdl:output message="tns:GetProfile2SoapOut">
            </wsdl:output>
        </wsdl:operation>
        <wsdl:operation name="GetCache">
            <wsdl:documentation>Returns the cached abilitations.</wsdl:documentation>
            <wsdl:input message="tns:GetCacheSoapIn">
            </wsdl:input>
            <wsdl:output message="tns:GetCacheSoapOut">
            </wsdl:output>
        </wsdl:operation>
    </wsdl:portType>
    <wsdl:binding name="ServiceSoap" type="tns:ServiceSoap">
        <soap:binding transport="http://schemas.xmlsoap.org/soap/http"/>
        <wsdl:operation name="GetProfile2">
            <soap:operation soapAction="http://server.com/SSO/GetProfile2" style="document"/>
            <wsdl:input>
                <soap:body use="literal"/>
            </wsdl:input>
            <wsdl:output>
                <soap:body use="literal"/>
            </wsdl:output>
        </wsdl:operation>
        <wsdl:operation name="GetCache">
            <soap:operation soapAction="http://server.com/SSO/GetCache" style="document"/>
            <wsdl:input>
                <soap:body use="literal"/>
            </wsdl:input>
            <wsdl:output>
                <soap:body use="literal"/>
            </wsdl:output>
        </wsdl:operation>
    </wsdl:binding> 
    <wsdl:service name="Service">
        <wsdl:documentation>Web service</wsdl:documentation>
        <wsdl:port binding="tns:ServiceSoap" name="ServiceSoap">
            <soap:address location="http://server.com:7001/services/Service.ServiceSoap/"/>
        </wsdl:port>   
    </wsdl:service>
</wsdl:definitions>

我在 SOAPUI 中创建了一个新的soap项目,使用模拟服务,我已经设置了 Weblogic服务器12c的主机和端口我必须在哪里安装战争。

SOAPUI 首选项中,我取消选中了所有的日志内容......“,在MockService属性中我将”需要SAOP操作“设置为false,并且我将WAR作为项目导出安装到 Weblogic 12c

好的,问题是,第一次调用webservice是可以的,我得到了预期的响应。

在第二次通话中,我收到以下错误:

com.eviware.soapui.impl.wsdl.mock.DispatchException: Missing operation for soapAction [http://server.com/SSO/GetProfile2] and body element [{http://server.com/SSO}GetProfile2] with SOAP Version [SOAP 1.1]
at com.eviware.soapui.impl.wsdl.support.soap.SoapUtils.findOperationForRequest(SoapUtils.java:330)
at com.eviware.soapui.impl.wsdl.mock.WsdlMockDispatcher.dispatchPostRequest(WsdlMockDispatcher.java:191)
at com.eviware.soapui.impl.wsdl.mock.WsdlMockDispatcher.dispatchRequest(WsdlMockDispatcher.java:113)
at com.eviware.soapui.impl.wsdl.mock.WsdlMockRunner.dispatchRequest(WsdlMockRunner.java:142)
at com.eviware.soapui.mockaswar.MockAsWarServlet$MockServletSoapUICore.dispatchRequest(MockAsWarServlet.java:247)
at com.eviware.soapui.mockaswar.MockAsWarServlet.service(MockAsWarServlet.java:182)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:790)
at weblogic.servlet.internal.StubSecurityHelper$ServletServiceAction.run(StubSecurityHelper.java:286)
at weblogic.servlet.internal.StubSecurityHelper$ServletServiceAction.run(StubSecurityHelper.java:260)
at weblogic.servlet.internal.StubSecurityHelper.invokeServlet(StubSecurityHelper.java:137)
at weblogic.servlet.internal.ServletStubImpl.execute(ServletStubImpl.java:350)
at weblogic.servlet.internal.ServletStubImpl.execute(ServletStubImpl.java:247)
at weblogic.servlet.internal.WebAppServletContext$ServletInvocationAction.wrapRun(WebAppServletContext.java:3650)
at weblogic.servlet.internal.WebAppServletContext$ServletInvocationAction.run(WebAppServletContext.java:3620)
at weblogic.security.acl.internal.AuthenticatedSubject.doAs(AuthenticatedSubject.java:326)
at weblogic.security.service.SecurityManager.runAsForUserCode(SecurityManager.java:196)
at weblogic.servlet.provider.WlsSecurityProvider.runAsForUserCode(WlsSecurityProvider.java:203)
at weblogic.servlet.provider.WlsSubjectHandle.run(WlsSubjectHandle.java:71)
at weblogic.servlet.internal.WebAppServletContext.doSecuredExecute(WebAppServletContext.java:2423)
at weblogic.servlet.internal.WebAppServletContext.securedExecute(WebAppServletContext.java:2280)
at weblogic.servlet.internal.WebAppServletContext.execute(WebAppServletContext.java:2258)
at weblogic.servlet.internal.ServletRequestImpl.runInternal(ServletRequestImpl.java:1626)
at weblogic.servlet.internal.ServletRequestImpl.run(ServletRequestImpl.java:1586)
at weblogic.servlet.provider.ContainerSupportProviderImpl$WlsRequestExecutor.run(ContainerSupportProviderImpl.java:270)
at weblogic.invocation.ComponentInvocationContextManager._runAs(ComponentInvocationContextManager.java:348)
at weblogic.invocation.ComponentInvocationContextManager.runAs(ComponentInvocationContextManager.java:333)
at weblogic.work.LivePartitionUtility.doRunWorkUnderContext(LivePartitionUtility.java:54)
at weblogic.work.PartitionUtility.runWorkUnderContext(PartitionUtility.java:41)
at weblogic.work.SelfTuningWorkManagerImpl.runWorkUnderContext(SelfTuningWorkManagerImpl.java:617)
at weblogic.work.ExecuteThread.execute(ExecuteThread.java:397)
at weblogic.work.ExecuteThread.run(ExecuteThread.java:346)

如果我从wsdl中删除消息标记,一切正常。请帮帮我!!!

2 个答案:

答案 0 :(得分:0)

我指的是weblogic 12.c

  1. 来自上面wsdl的我的Soapui项目,我创建了随机响应并模拟属性的模拟
  2. enter image description here

    模拟属性: enter image description here

    1. 下面的soapui中的模拟服务是pic,所有操作都使用随机模拟响应
    2.   

      注意:从soapui导出项目作为战争,我已经注意上下文和   战争名称相同

      enter image description here

      1. 登录weblogic - &gt;部署 - &gt;安装并指向从soapui获得的war文件。
      2. enter image description here

        1. 我提供的上下文名称为“mocksoap”
        2. enter image description here

          1. 选择选项是,转到部署配置屏幕,然后单击完成 enter image description here
          2. 选择 - &gt;控制标签 - &gt;选择上下文并单击开始和所有服务
          3. enter image description here

            1. 监控下的交叉检查 - &gt; Servlets应列出已部署的所有servlet  enter image description here

            2. 访问Servelet并选择要测试的WSDL

            3. enter image description here  9.打开soapui并测试部署到weblogic的模拟服务战,它将表现为全新的可测试服务。     我已经在下面展示了我如何获得随机响应,同时注意它指向我的weblogic端点

              enter image description here

              如果您喜欢这个答案,请不要忘记投票!!!

答案 1 :(得分:0)

我在soapUI上遇到了同样的错误,第一次出现响应,然后对于后续请求,它变得空白。好像是图书馆问题。使用https://github.com/eveoh/weblogic-soapui-mock-ear将战争打入耳边。这为我解决了问题。我使用过weblogic 12c,soap UI 5.3.0