5

Java プロジェクトで、jax-ws と wsdl を使用して Web サービス クライアントを作成しました。要求は有効な xml ですが、この特定の SOAP 呼び出しで必要なプレフィックスがありません。現在、xmlns={@javax.xml.bind.annotation.XmlNs(prefix="gen", namespaceURI="http://schemas...")}) を package-info.java クラスに手動で追加することでこれを解決しますただし、パッケージ情報が自動的に作成され、何らかの理由でソースが再度生成されるとソリューションが上書きされるため、これは最適なソリューションではないと感じています。

私のwsdlに何かが欠けていると思われます。

これがwsdlです:

<?xml version="1.0" encoding="UTF-8"?>
    <wsdl:definitions xmlns:tns="http://xmlns.example.com/1308658932768" xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/" xmlns:ns0="http://schemas.triennium.com/Servicepunt/gen" xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/" name="Untitled" targetNamespace="http://xmlns.example.com/1308658932768">
        <wsdl:types>
        <xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema"
     xmlns="http://schemas.triennium.com/Servicepunt/gen"
     targetNamespace="http://schemas.triennium.com/Servicepunt/gen"
     elementFormDefault="qualified"
     attributeFormDefault="unqualified">
            <xs:element name="CallInfo">
                <xs:complexType>
                    ...
                </xs:complexType>
            </xs:element>
            <xs:element name="ResponseStatus">
                <xs:complexType>
                    ...
                </xs:complexType>
            </xs:element>
            <xs:element name="Credentials">
                <xs:complexType>
                    ...
                </xs:complexType>
            </xs:element>
            <xs:element name="AuthenticateAannemerRequest">
                <xs:complexType>
                    ...
                </xs:complexType>
            </xs:element>
            <xs:element name="AuthenticateAannemerResponse">
                <xs:complexType>
                    ...
                </xs:complexType>
            </xs:element>
        </xs:schema>
    </wsdl:types>
    <wsdl:service name="WSDL_Generator.2.0.2">
        <wsdl:port name="AuthenticateAannemer.2.0.2" binding="tns:AuthenticateAannemer.2.0.2Binding">
            <soap:address location="http://10.11.2.12:2592"/>
        </wsdl:port>
    </wsdl:service>
    <wsdl:portType name="AuthenticateAannemer">
        <wsdl:operation name="AuthenticateAannemer">
            <wsdl:input message="tns:AuthenticateAannemerRequest"/>
            <wsdl:output message="tns:AuthenticateAannemerResponse"/>
        </wsdl:operation>
    </wsdl:portType>
    <wsdl:binding name="AuthenticateAannemer.2.0.2Binding" type="tns:AuthenticateAannemer">
        <soap:binding style="document" transport="http://schemas.xmlsoap.org/soap/http"/>
        <wsdl:operation name="AuthenticateAannemer">
            <soap:operation style="document" soapAction="/AuthenticateAannemer.2.0.2/AuthenticateAannemer"/>
            <wsdl:input>
                <soap:body use="literal" parts="input"/>
            </wsdl:input>
            <wsdl:output>
                <soap:body use="literal" parts="output"/>
            </wsdl:output>
        </wsdl:operation>
    </wsdl:binding>
    <wsdl:message name="AuthenticateAannemerRequest">
        <wsdl:part name="input" element="ns0:AuthenticateAannemerRequest"/>
    </wsdl:message>
    <wsdl:message name="AuthenticateAannemerResponse">
        <wsdl:part name="output" element="ns0:AuthenticateAannemerResponse"/>
    </wsdl:message>
</wsdl:definitions>

プレフィックスなしのリクエストは次のとおりです。

<?xml version='1.0' encoding='UTF-8'?>
<S:Envelope xmlns:S="http://schemas.xmlsoap.org/soap/envelope/">
    <S:Body>
        <AuthenticateAannemerRequest   xmlns="http://schemas.triennium.com/Servicepunt/gen">
            <CallInfo>
                <Customer>...</Customer>
                <Module>...</Module>
                <Version>...</Version>
            </CallInfo>
            <Credentials>
                <Username>...</Username>
                <Password>...</Password>
            </Credentials>
        </AuthenticateAannemerRequest>
    </S:Body>
</S:Envelope>

私が望んでいるリクエストは次のとおりです。

<?xml version='1.0' encoding='UTF-8'?>
<S:Envelope xmlns:S="http://schemas.xmlsoap.org/soap/envelope/">
    <S:Body>
        <gen:AuthenticateAannemerRequest xmlns:gen="http://schemas.triennium.com/Servicepunt/gen">
            <gen:CallInfo>
                <gen:Customer>...</Customer>
                <gen:Module>...</Module>
                <gen:Version>...</Version>
            </gen:CallInfo>
            <gen:Credentials>
                <gen:Username>...</Username>
                <gen:Password>...</Password>
            </gen:Credentials>
        </gen:AuthenticateAannemerRequest>
    </S:Body>
</S:Envelope>

編集: 2 番目の例で名前空間宣言にプレフィックスを追加しました。これは最初から存在していましたが、コードの c/p 中に何らかの形で失われました。

4

3 に答える 3

0
@XmlRootElement(namespace = "http://schemas.triennium.com/Servicepunt/gen")
public class AuthenticateAannemerRequest implements Serializable {

    private CallInfo callInfo;
    private Credentials credentials;

    public AuthenticateAannemerRequest() {
    }

    @XmlElement(namespace = "http://schemas.triennium.com/Servicepunt/gen")
    public CallInfo getCallInfo() {
        return callInfo;
    }

    public void setCallInfo(CallInfo callInfo) {
        this.callInfo = callInfo;
    }

    @XmlElement(namespace = "http://schemas.triennium.com/Servicepunt/gen")
    public Credentials getCredentials() {
        return credentials;
    }

    public void setCredentials(Credentials credentials) {
        this.credentials = credentials;
    }
}
于 2013-03-28T09:17:38.643 に答える