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

带有引用XSD类型的部件的WSDL文档文本

林博厚
2023-03-14

我一直在阅读WSDL1.1规范,有一件事对我来说很奇怪--除了WS-I基本概要之外,是什么阻止了我这样做:

<message name="helloRequest">
    <part name="arg1" type="xs:string" />
</message>
<message name="helloResponse">
    <part name="result" type="xs:string" />
</message>

<portType name="Port02">
    <operation name="hello">
        <input message="tns:helloRequest" name="helloRequest" />
        <output message="tns:helloResponse" name="helloResponse" />
    </operation>
</portType>

<binding name="Port02SoapBinding" type="tns:Port02">
    <soap:binding style="document" transport="http://schemas.xmlsoap.org/soap/http"/>
    <operation name="hello">
        <input name="helloRequest">
            <soap:body use="literal" />
        </input>
        <output name="helloResponse">
            <soap:body use="literal" />
        </output>
    </operation>
</binding>

它是Document/Literal web服务,但是in/out消息包含引用XSD(简单)类型的部分,而不是全局元素。

这是否意味着得到的SOAP消息(根据WSDL规范)将如下所示(SOAP正文中的文本内容)?

<SOAP-ENV:Envelope
    xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/"
    xmlns:xsi="http://www.w3.org/1999/XMLSchema-instance"
    xmlns:xs="http://www.w3.org/1999/XMLSchema">
    <SOAP-ENV:Body xsi:type="xs:string">value</SOAP-ENV:Body>
</SOAP-ENV:Envelope>

共有1个答案

姜旭
2023-03-14

这是边缘情况--在实践中,我检查过的所有java(axis1、axis2、cxf、jaxrpc-ri)实现都是以没有命名空间的部件名称命名元素的包装字符串(或任何简单)类型。

Axis1:

private static void _initOperationDesc1(){
    org.apache.axis.description.OperationDesc oper;
    org.apache.axis.description.ParameterDesc param;
    oper = new org.apache.axis.description.OperationDesc();
    oper.setName("hello");
    param = new org.apache.axis.description.ParameterDesc(new javax.xml.namespace.QName("", "arg1"), org.apache.axis.description.ParameterDesc.IN, new javax.xml.namespace.QName("http://www.w3.org/2001/XMLSchema", "string"), java.lang.String.class, false, false);
    oper.addParameter(param);
    oper.setReturnType(new javax.xml.namespace.QName("http://www.w3.org/2001/XMLSchema", "string"));
    oper.setReturnClass(java.lang.String.class);
    oper.setReturnQName(new javax.xml.namespace.QName("", "result"));
    oper.setStyle(org.apache.axis.constants.Style.DOCUMENT);
    oper.setUse(org.apache.axis.constants.Use.LITERAL);
    _operations[0] = oper;
}

JAXRPC-RI:

SOAPBlockInfo _bodyBlock = new SOAPBlockInfo(ns1_hello_arg1_QNAME);
_bodyBlock.setValue(arg1);
_bodyBlock.setSerializer(ns2_myns2_string__java_lang_String_String_Serializer);
_request.setBody(_bodyBlock);
...
private static final javax.xml.namespace.QName ns1_hello_arg1_QNAME = new QName("", "arg1");
<SOAP-ENV:Envelope
    xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/"
    xmlns:xsi="http://www.w3.org/1999/XMLSchema-instance"
    xmlns:xs="http://www.w3.org/1999/XMLSchema">
    <SOAP-ENV:Body>
       <arg1>value</arg1>
    </SOAP-ENV:Body>
</SOAP-ENV:Envelope>

编辑:在WSDL2.0中也没有消息,操作输入和输出必须引用元素(或#any、#none或#other)。

 类似资料:
  • 首选框架是Spring Web Service,但也欢迎其他解决方案。 问候,

  • 问题内容: 我正在使用webservice soa,使用netbeans(jax- ws),我使用netbeans自动生成客户端,并且一切运行良好,但是我看到在客户端运行时wsdl始终在下载。 在生产中,我不想公开wsdl,并且我试图修改客户端,因为不需要wsdl,我的所有意图都是错误的,我发现了这一点: 但是当执行第一行时,我发现此异常: 有什么想法可以忽略wsdl吗? 问题答案: 最后,我使用

  • 我正在实现一个用于阅读的索引器。使用ApachePOI插件的docx类型文档。我所做的代码如下 当我从第1行执行此操作时,我会低于异常。 组织。阿帕奇。xmlbeans。SchemaTypeLoaderException:无法解析句柄_XY_Q=space |R的类型=space@httphttp://www.w3。org/XML/1998/namespace(schemaorg_apache_x

  • 我在这里找到了一个非常简洁的链接来托管Swagger用户界面中的yaml文件,但是它使用了Springfox而不是Springdoc,所以我想知道是否有任何其他类似的方法,因为我的公司更喜欢后者。 我真的很感激任何帮助,只要有个导游就可以了。

  • 我有我的API文件与大摇大摆。为了方便开发人员,我想在我的网站上提供的招摇过市的图形用户界面以及。但是,我的提供商尚未安装php yaml扩展。这意味着我不能在自己的网站上使用GUI。 所以,我想使用第三方GUI。我知道我可以使用https://petstore.swagger.io/,并在文本框中输入到我的yaml文件的链接。这也不是真正的用户友好。我更喜欢在调用url时打开GUI并指定yaml