簡體   English   中英

Weblogic 12.1.3上重復的MTOM策略

[英]Duplicated MTOM policy on Weblogic 12.1.3

我正在使用JAX-WS在weblogic 12.1.3上使用MTOM開發下載服務。 部署后,我的wsdl添加了兩個“ MTOM”策略:

<definitions targetNamespace="http://schemas.test.pl/Test/001/2015/12/001" name="TestMTOM">
<wsp:UsingPolicy wsu:Required="true"/>
<wsp1_2:Policy wsu:Id="Mtom.xml">
    <ns0:OptimizedMimeSerialization/>
</wsp1_2:Policy>
<wsp:UsingPolicy wssutil:Required="true"/>
<wsp1_2:Policy wssutil:Id="Mtom.xml">
    <ns1:OptimizedMimeSerialization/>
</wsp1_2:Policy>
<wsp:Policy wssutil:Id="TestMTOM_portBinding_MTOM_Policy-TestMTOM_portBinding_MTOM_Policy">
    <ns2:OptimizedMimeSerialization wsp:Optional="true"/>
</wsp:Policy>
<types>
    <xsd:schema>
        <xsd:import namespace="http://schemas.test.pl/Test/199/2014/07/001" schemaLocation="http://localhost:7001/TestWebservice/TestMTOM?xsd=1"/>
    </xsd:schema>
    <xsd:schema>
        <xsd:import namespace="http://schemas.test.pl/Test/301/2015/12/001" schemaLocation="http://localhost:7001/TestWebservice/TestMTOM?xsd=2"/>
    </xsd:schema>
    <xsd:schema>
        <xsd:import namespace="http://schemas.test.pl/Test/302/2015/12/001" schemaLocation="http://localhost:7001/TestWebservice/TestMTOM?xsd=3"/>
    </xsd:schema>
</types>
<message name="ReadPrintFile">
    <part name="requestBody" element="ns3:Document"/>
</message>
<message name="ReadPrintFileResponse">
    <part name="responseBody" element="ns4:Document"/>
</message>
<message name="FaultMessage">
    <part name="fault" element="ns5:Document"/>
</message>
<portType name="TestMTOM_portType">
    <operation name="ReadPrintFile">
        <input wsam:Action="http://schemas.test.pl/Test/TestMTOM/ReadPrintFile" message="tns:ReadPrintFile"/>
        <output wsam:Action="http://schemas.test.pl/Test/001/2015/12/001/TestMTOM_portType/ReadPrintFileResponse" message="tns:ReadPrintFileResponse"/>
        <fault message="tns:FaultMessage" name="FaultMessage" wsam:Action="http://schemas.test.pl/Test/001/2015/12/001/TestMTOM_portType/ReadPrintFile/Fault/FaultMessage"/>
    </operation>
</portType>
<binding name="TestMTOM_portBinding" type="tns:TestMTOM_portType">
    <wsp:PolicyReference URI="#Mtom.xml"/>
    <wsp:PolicyReference URI="#TestMTOM_portBinding_MTOM_Policy-TestMTOM_portBinding_MTOM_Policy"/>
    <wsp:PolicyReference URI="#Mtom.xml"/>
    <soap:binding transport="http://schemas.xmlsoap.org/soap/http" style="document"/>
    <operation name="ReadPrintFile">
        <soap:operation soapAction="http://schemas.test.pl/Test/TestMTOM/ReadPrintFile"/>
        <input>
            <soap:body use="literal"/>
        </input>
        <output>
            <soap:body use="literal"/>
        </output>
        <fault name="FaultMessage">
            <soap:fault name="FaultMessage" use="literal"/>
        </fault>
    </operation>
</binding>
<service name="TestMTOM">
    <port name="TestMTOM_port" binding="tns:TestMTOM_portBinding">
        <soap:address location="http://localhost:7001/TestWebservice/TestMTOM"/>
    </port>
</service>

嘗試連接到此類已部署的Web服務給了我錯誤:

com.sun.xml.internal.ws.policy.PolicyException: WSP1020: Found two policies in one document with the same id: "Mtom.xml".
       at com.sun.xml.internal.ws.policy.jaxws.SafePolicyReader$PolicyRecord.setUri(SafePolicyReader.java:113)
       at com.sun.xml.internal.ws.policy.jaxws.SafePolicyReader.readPolicyElement(SafePolicyReader.java:272)
       at com.sun.xml.internal.ws.policy.jaxws.PolicyWSDLParserExtension.definitionsElements(PolicyWSDLParserExtension.java:413)
       at com.sun.xml.internal.ws.wsdl.parser.DelegatingParserExtension.definitionsElements(DelegatingParserExtension.java:80)
       at com.sun.xml.internal.ws.wsdl.parser.FoolProofParserExtension.definitionsElements(FoolProofParserExtension.java:85)
       at com.sun.xml.internal.ws.wsdl.parser.WSDLParserExtensionFacade.definitionsElements(WSDLParserExtensionFacade.java:123)
       at com.sun.xml.internal.ws.wsdl.parser.RuntimeWSDLParser.parseWSDL(RuntimeWSDLParser.java:464)
       at com.sun.xml.internal.ws.wsdl.parser.RuntimeWSDLParser.parse(RuntimeWSDLParser.java:234)
       at com.sun.xml.internal.ws.wsdl.parser.RuntimeWSDLParser.parse(RuntimeWSDLParser.java:194)
       at com.sun.xml.internal.ws.wsdl.parser.RuntimeWSDLParser.parse(RuntimeWSDLParser.java:163)
       at com.sun.xml.internal.ws.client.WSServiceDelegate.parseWSDL(WSServiceDelegate.java:348)
       at com.sun.xml.internal.ws.client.WSServiceDelegate.<init>(WSServiceDelegate.java:306)
       at com.sun.xml.internal.ws.client.WSServiceDelegate.<init>(WSServiceDelegate.java:215)
       at com.sun.xml.internal.ws.client.WSServiceDelegate.<init>(WSServiceDelegate.java:196)
       at com.sun.xml.internal.ws.client.WSServiceDelegate.<init>(WSServiceDelegate.java:192)
       at com.sun.xml.internal.ws.spi.ProviderImpl.createServiceDelegate(ProviderImpl.java:104)
       at javax.xml.ws.Service.<init>(Service.java:77)
       at javax.xml.ws.Service.create(Service.java:707)
       at com.test.ws.mtom.TestMTOMClient.main(TestMTOMClient.java:57)

任何想法都會被感動。

服務實現的注釋如下:

@javax.xml.ws.soap.MTOM
@javax.jws.WebService(
                      serviceName = "TestMTOM",
                      portName = "TestMTOM_port",
                      targetNamespace = "http://schemas.test.pl/test/001/2015/12/001",
                      wsdlLocation = "file:/c:/TestWebservice/wsdl/TestMTOM.soap12/TestMTOM.wsdl",
                      endpointInterface = "pl.test.schemas.smw2._001._2015._12._001.TestMTOMPortType")
public class TestMTOMPortTypeImpl implements TestMTOMPortType {
}

並且客戶端在嘗試時遇到錯誤:

URL url = new URL("http://localhost:7001/TestWebservice/TestMTOM?WSDL");
QName qname = new QName("http://schemas.test.pl/test/001/2015/12/001", "TestMTOM");
Service service = TestMTOM.create(url, qname);

我找到了解決方案。

我准備了帶有Web服務定義的webservices.xml(盡管不需要),並將其放在WEB-INF目錄中。 使用這樣的文件進行部署可以解決該問題。 現在部署的wsdl僅具有一項MTOM策略:-)

就我而言,刪除@ javax.jws.WebService上的wsdlLocation屬性有助於

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM