org.springframework.Bohnen.factory.BeanCreationException: Fehler beim erstellen bean mit dem Namen 'marshaller' (definiert in der Klasse

Ich versuche entwickeln von SOAP-web-service-client mit spring-ws-2.2.0 & spring-boot-1.1.8 in eine eigenständige app, aber ich bekomme diese Fehlermeldung:

org.springframework.beans.factory.BeanCreationException: Error creating bean with 

name 'marshaller' defined in class pcc_load.ApexConfiguration: Invocation of init method
 failed; nested exception is org.springframework.oxm.UncategorizedMappingException:
 Unknown JAXB exception; nested exception is javax.xml.bind.JAXBException: Provider com.sun.xml.internal.bind.v2.ContextFactory could not be instantiated: 

javax.xml.bind.JAXBException: "pcc_load/src/com/company/dept/apex/stubs/ObjectFactory.java" doesnt contain ObjectFactory.class or jaxb.index
 - with linked exception:

[javax.xml.bind.JAXBException: "pcc_load/src/com/company/department/apex/stubs/ObjectFactory.java" doesnt contain ObjectFactory.class or jaxb.index]

Ich all die stubs, die mit ant & die wsdl-ohne Fehler, hier ist die wsdl:

<?xml version="1.0" encoding="UTF-8"?>
<definitions xmlns:http="http://schemas.xmlsoap.org/wsdl/http/"
    xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/" xmlns:s="http://www.w3.org/2001/XMLSchema"
    xmlns:s0="PCCDATA_APEX_WS" xmlns:tns1="dsws.businessobjects.com"
    targetNamespace="PCCDATA_APEX_WS" xmlns="http://schemas.xmlsoap.org/wsdl/"
    name="BIServices">
    <types>
        <s:schema elementFormDefault="qualified" targetNamespace="PCCDATA_APEX_WS">
            <s:simpleType name="Operator">
                <s:restriction base="s:string">
                    <s:enumeration value="EQUAL" />
                    <s:enumeration value="GREATER" />
                    <s:enumeration value="GREATER_OR_EQUAL" />
                    <s:enumeration value="LESS" />
                    <s:enumeration value="LESS_OR_EQUAL" />
                    <s:enumeration value="NOT_EQUAL" />
                    <s:enumeration value="INLIST" />
                    <s:enumeration value="NOT_INLIST" />
                </s:restriction>
            </s:simpleType>
            <s:complexType name="FilterCondition">
                <s:sequence>
                    <s:element name="value" type="s:string" />
                    <s:element name="operator" type="s0:Operator" />
                </s:sequence>
            </s:complexType>
            <s:complexType name="LovValueIndex">
                <s:sequence>
                    <s:element name="valueofPrompt" type="s:string" />
                    <s:element name="index" type="s:string" />
                </s:sequence>
            </s:complexType>
            <s:complexType name="DrillFilter">
                <s:sequence>
                    <s:element name="dimension" type="s:string" />
                    <s:element name="value" type="s:string" />
                    <s:element name="operator" type="s0:Operator" />
                </s:sequence>
            </s:complexType>
            <s:element name="GetReportBlock_PCCDATA_APEX_WS">
                <s:complexType>
                    <s:sequence>
                        <s:element name="login" type="s:string" minOccurs="0"
                            nillable="true" />
                        <s:element name="password" type="s:string" minOccurs="0"
                            nillable="true" />
                        <s:element name="_Business_Segment__Multiple__Optional_"
                            type="s0:LovValueIndex" minOccurs="0" maxOccurs="unbounded"
                            nillable="true" />
                        <s:element name="resetState" type="s:boolean" minOccurs="0"
                            nillable="true" />
                        <s:element name="refresh" type="s:boolean" minOccurs="0"
                            nillable="true" />
                        <s:element name="getFromLatestDocumentInstance" type="s:boolean"
                            minOccurs="0" nillable="true" />
                        <s:element name="getFromUserInstance" type="s:boolean"
                            minOccurs="0" nillable="true" />
                        <s:element name="turnOutputToVTable" type="s:boolean"
                            minOccurs="0" nillable="true" />
                        <s:element name="closeDocument" type="s:boolean"
                            minOccurs="0" nillable="true" />
                        <s:element name="startRow" type="s:int" minOccurs="0"
                            nillable="true" />
                        <s:element name="endRow" type="s:int" minOccurs="0"
                            nillable="true" />
                    </s:sequence>
                </s:complexType>
            </s:element>
            <s:simpleType name="DrillOperation">
                <s:restriction base="s:string">
                    <s:enumeration value="UP" />
                    <s:enumeration value="DOWN" />
                </s:restriction>
            </s:simpleType>
            <s:complexType name="DrillPath">
                <s:sequence>
                    <s:element name="from" type="s:string" />
                    <s:element name="value" type="s:string" />
                    <s:element name="drillOperation" type="s0:DrillOperation" />
                </s:sequence>
            </s:complexType>
            <s:element name="Drill_PCCDATA_APEX_WS">
                <s:complexType>
                    <s:sequence>
                        <s:element name="login" type="s:string" minOccurs="0"
                            nillable="true" />
                        <s:element name="password" type="s:string" minOccurs="0"
                            nillable="true" />
                        <s:element name="drillPath" type="s0:DrillPath"
                            minOccurs="0" maxOccurs="unbounded" nillable="true" />
                        <s:element name="filter" type="s0:DrillFilter"
                            minOccurs="0" maxOccurs="unbounded" nillable="true" />
                        <s:element name="_Business_Segment__Multiple__Optional_"
                            type="s0:LovValueIndex" minOccurs="0" maxOccurs="unbounded"
                            nillable="true" />
                        <s:element name="resetState" type="s:boolean" minOccurs="0"
                            nillable="true" />
                        <s:element name="refresh" type="s:boolean" minOccurs="0"
                            nillable="true" />
                        <s:element name="getFromLatestDocumentInstance" type="s:boolean"
                            minOccurs="0" nillable="true" />
                        <s:element name="getFromUserInstance" type="s:boolean"
                            minOccurs="0" nillable="true" />
                        <s:element name="turnOutputToVTable" type="s:boolean"
                            minOccurs="0" nillable="true" />
                        <s:element name="closeDocument" type="s:boolean"
                            minOccurs="0" nillable="true" />
                        <s:element name="startRow" type="s:int" minOccurs="0"
                            nillable="true" />
                        <s:element name="endRow" type="s:int" minOccurs="0"
                            nillable="true" />
                    </s:sequence>
                </s:complexType>
            </s:element>
            <s:complexType name="TRow">
                <s:sequence>
                    <s:element name="cell" type="s:anyType" maxOccurs="unbounded"
                        nillable="true" />
                </s:sequence>
            </s:complexType>
            <s:complexType name="TTable">
                <s:sequence>
                    <s:element name="row" maxOccurs="unbounded" type="s0:TRow" />
                </s:sequence>
            </s:complexType>
            <s:complexType name="THeader">
                <s:sequence>
                    <s:element name="row" maxOccurs="unbounded" type="s0:TRow" />
                </s:sequence>
            </s:complexType>
            <s:complexType name="TFooter">
                <s:sequence>
                    <s:element name="row" maxOccurs="unbounded" type="s0:TRow" />
                </s:sequence>
            </s:complexType>
            <s:element name="GetReportBlock_PCCDATA_APEX_WSResponse">
                <s:complexType>
                    <s:sequence>
                        <s:element name="table" type="s0:TTable" />
                        <s:element name="headers" type="s0:THeader" />
                        <s:element name="footers" type="s0:TFooter" />
                        <s:element name="user" type="s:string" />
                        <s:element name="documentation" type="s:string" />
                        <s:element name="documentname" type="s:string" />
                        <s:element name="lastrefreshdate" type="s:dateTime" />
                        <s:element name="creationdate" type="s:dateTime" />
                        <s:element name="creator" type="s:string" />
                        <s:element name="isScheduled" type="s:boolean" />
                        <s:element name="scheduleStartTime" type="s:dateTime" />
                        <s:element name="scheduleEndTime" type="s:dateTime" />
                        <s:element name="tableType" type="s:string" />
                        <s:element name="nbColumns" type="s:int" />
                        <s:element name="nbLines" type="s:int" />
                        <s:element name="message" type="s:string" />
                    </s:sequence>
                </s:complexType>
            </s:element>
            <s:element name="Drill_PCCDATA_APEX_WSResponse">
                <s:complexType>
                    <s:sequence>
                        <s:element name="table" type="s0:TTable" />
                        <s:element name="headers" type="s0:THeader" />
                        <s:element name="footers" type="s0:TFooter" />
                        <s:element name="user" type="s:string" />
                        <s:element name="documentation" type="s:string" />
                        <s:element name="documentname" type="s:string" />
                        <s:element name="lastrefreshdate" type="s:dateTime" />
                        <s:element name="creationdate" type="s:dateTime" />
                        <s:element name="creator" type="s:string" />
                        <s:element name="isScheduled" type="s:boolean" />
                        <s:element name="scheduleStartTime" type="s:dateTime" />
                        <s:element name="scheduleEndTime" type="s:dateTime" />
                        <s:element name="tableType" type="s:string" />
                        <s:element name="nbColumns" type="s:int" />
                        <s:element name="nbLines" type="s:int" />
                        <s:element name="message" type="s:string" />
                    </s:sequence>
                </s:complexType>
            </s:element>
            <s:element name="QaaWSHeader">
                <s:complexType>
                    <s:sequence>
                        <s:element name="sessionID" type="s:string" minOccurs="0"
                            maxOccurs="1" nillable="true" />
                        <s:element name="serializedSession" type="s:string"
                            minOccurs="0" maxOccurs="1" nillable="true" />
                        <s:element name="ClientType" type="s:string" minOccurs="0"
                            maxOccurs="1" nillable="true" />
                        <s:element name="AuditingObjectID" type="s:string"
                            minOccurs="0" maxOccurs="1" nillable="true" />
                        <s:element name="AuditingObjectName" type="s:string"
                            minOccurs="0" maxOccurs="1" nillable="true" />
                    </s:sequence>
                </s:complexType>
            </s:element>
        </s:schema>
    </types>
    <message name="GetReportBlock_PCCDATA_APEX_WSSoapIn">
        <part name="parameters" element="s0:GetReportBlock_PCCDATA_APEX_WS" />
        <part name="request_header" element="s0:QaaWSHeader" />
    </message>
    <message name="GetReportBlock_PCCDATA_APEX_WSSoapOut">
        <part name="parameters" element="s0:GetReportBlock_PCCDATA_APEX_WSResponse" />
    </message>
    <message name="Drill_PCCDATA_APEX_WSSoapIn">
        <part name="parameters" element="s0:Drill_PCCDATA_APEX_WS" />
        <part name="request_header" element="s0:QaaWSHeader" />
    </message>
    <message name="Drill_PCCDATA_APEX_WSSoapOut">
        <part name="parameters" element="s0:Drill_PCCDATA_APEX_WSResponse" />
    </message>
    <portType name="BIServicesSoap">
        <operation name="GetReportBlock_PCCDATA_APEX_WS">
            <documentation></documentation>
            <input message="s0:GetReportBlock_PCCDATA_APEX_WSSoapIn" />
            <output message="s0:GetReportBlock_PCCDATA_APEX_WSSoapOut" />
        </operation>
        <operation name="Drill_PCCDATA_APEX_WS">
            <documentation></documentation>
            <input message="s0:Drill_PCCDATA_APEX_WSSoapIn" />
            <output message="s0:Drill_PCCDATA_APEX_WSSoapOut" />
        </operation>
    </portType>
    <binding name="BIServicesSoap" type="s0:BIServicesSoap">
        <soap:binding transport="http://schemas.xmlsoap.org/soap/http"
            style="document" />
        <operation name="GetReportBlock_PCCDATA_APEX_WS">
            <documentation></documentation>
            <soap:operation soapAction="PCCDATA_APEX_WS/GetReportBlock_PCCDATA_APEX_WS"
                style="document" />
            <input>
                <soap:header message="s0:GetReportBlock_PCCDATA_APEX_WSSoapIn"
                    part="request_header" use="literal">
                    <soap:headerfault message="s0:GetReportBlock_PCCDATA_APEX_WSSoapIn"
                        part="request_header" use="literal" />
                </soap:header>
                <soap:body use="literal" parts="parameters" />
            </input>
            <output>
                <soap:body use="literal" />
            </output>
        </operation>
        <operation name="Drill_PCCDATA_APEX_WS">
            <documentation></documentation>
            <soap:operation soapAction="PCCDATA_APEX_WS/Drill_PCCDATA_APEX_WS"
                style="document" />
            <input>
                <soap:header message="s0:Drill_PCCDATA_APEX_WSSoapIn"
                    part="request_header" use="literal">
                    <soap:headerfault message="s0:Drill_PCCDATA_APEX_WSSoapIn"
                        part="request_header" use="literal" />
                </soap:header>
                <soap:body use="literal" parts="parameters" />
            </input>
            <output>
                <soap:body use="literal" />
            </output>
        </operation>
    </binding>
    <service name="PCCDATA_APEX_WS">
        <documentation></documentation>
        <port name="BIServicesSoap" binding="s0:BIServicesSoap">
            <soap:address
                location="http://xyz.test.app.company.com:8080/dswsbobje/qaawsservices/queryasaservice/biws?cuid=AQyF0wiLGyhNgX41XOXwiEs&amp;authType=secEnterprise&amp;locale=en&amp;timeout=60&amp;ConvertAnyType=true" />
        </port>
    </service>
</definitions>

Habe ich dieses tutorial/guide von Frühling:

https://spring.io/guides/gs/consuming-web-service/

Hier ist mein main:

import org.springframework.context.ApplicationContext;
import org.springframework.boot.SpringApplication;

public class main {

    public static void main (String [] args)
    {


    ApplicationContext ctx = SpringApplication.run(ApexConfiguration.class);

        apexClient newApexClient = ctx.getBean(apexClient.class);

        newApexClient.callDrillPCCDATAAPEXWS();

    }

}

Hier ist mein Jaxb2Marshaller configuration-Klasse:

import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.oxm.jaxb.Jaxb2Marshaller;
@Configuration
public class ApexConfiguration {

    @Bean
    public Jaxb2Marshaller marshaller() {
        Jaxb2Marshaller marshaller = new Jaxb2Marshaller();
        /* I tried these values but getting the same error?
         *  1) "apex.wsdl" 
         *  or 
         *  2) "/apex.wsdl"
                3) "com.company.dept.apex.stubs"
         *   or 
         *  4) fully qualified package that stubs are generated in "com.company.dept.apex.stubs.ObjectFactory"
         */
        marshaller.setContextPath("apex.wsdl");
        return marshaller;
    }

    @Bean
    public apexClient weatherClient(Jaxb2Marshaller marshaller) {
        apexClient client = new apexClient();
        client.setDefaultUri("http://xyz.test.app.company.com:8080");
        client.setMarshaller(marshaller);
        client.setUnmarshaller(marshaller);
        return client;
    }
}

Hier ist die eigentliche client-web-service-Implementierung & Anfrage-Aufrufe:

import javax.xml.bind.JAXBElement;
import org.springframework.ws.client.core.WebServiceTemplate;
import org.springframework.ws.client.core.support.WebServiceGatewaySupport;
import org.springframework.ws.soap.client.core.SoapActionCallback;
import org.springframework.beans.factory.InitializingBean;
import com.company.dept.apex.stubs.DrillPCCDATAAPEXWS;
import com.company.dept.apex.stubs.DrillPCCDATAAPEXWSResponse;
import com.company.dept.apex.stubs.GetReportBlockPCCDATAAPEXWS;
import com.company.dept.apex.stubs.GetReportBlockPCCDATAAPEXWSResponse;
import com.company.dept.apex.stubs.ObjectFactory;

public class apexClient extends WebServiceGatewaySupport {

    private WebServiceTemplate webServiceTemplate;

    //ZBIJOB248/testme05 
    public String username="user1234";
    public String pass="pass1234";
    public DrillPCCDATAAPEXWSResponse callDrillPCCDATAAPEXWS()
    {
        setDefaultUri("http://xyz.test.app.company.com:8080/dswsbobje/qaawsservices/queryasaservice/biws?cuid=AQyF0wiLGyhNgX41XOXwiEs&amp;authType=secEnterprise&amp;locale=en&amp;timeout=60&amp;ConvertAnyType=true");
        DrillPCCDATAAPEXWS request = new DrillPCCDATAAPEXWS();
        ObjectFactory objectFactory = new ObjectFactory();
        JAXBElement<String> login = objectFactory.createDrillPCCDATAAPEXWSLogin(username);
        JAXBElement<String> password = objectFactory.createDrillPCCDATAAPEXWSPassword(pass);
        request.setLogin(login);
        request.setPassword(password);
        //
        DrillPCCDATAAPEXWSResponse response = 
                (DrillPCCDATAAPEXWSResponse) getWebServiceTemplate().marshalSendAndReceive( 
                        request, new SoapActionCallback("http://xyz.test.app.company.com:8080/dswsbobje/qaawsservices/queryasaservice/biws?cuid=AQyF0wiLGyhNgX41XOXwiEs&amp;authType=secEnterprise&amp;locale=en&amp;timeout=60&amp;ConvertAnyType=true"));

        return response;
    }


    public GetReportBlockPCCDATAAPEXWSResponse callGetReportBlockPCCDATAAPEXWSResponse()
    {
        setDefaultUri("http://xyz.test.app.company.com:8080/dswsbobje/qaawsservices/queryasaservice/biws?cuid=AQyF0wiLGyhNgX41XOXwiEs&amp;authType=secEnterprise&amp;locale=en&amp;timeout=60&amp;ConvertAnyType=true");
        GetReportBlockPCCDATAAPEXWS request = new GetReportBlockPCCDATAAPEXWS();
        ObjectFactory objectFactory = new ObjectFactory();
        JAXBElement<String> login = objectFactory.createDrillPCCDATAAPEXWSLogin(username);
        JAXBElement<String> password = objectFactory.createDrillPCCDATAAPEXWSPassword(pass);
        request.setLogin(login);
        request.setPassword(password);
        //
        GetReportBlockPCCDATAAPEXWSResponse response = (GetReportBlockPCCDATAAPEXWSResponse) getWebServiceTemplate().marshalSendAndReceive( 
                request, new SoapActionCallback("http://xyz.test.app.company.com:8080/dswsbobje/qaawsservices/queryasaservice/biws?cuid=AQyF0wiLGyhNgX41XOXwiEs&amp;authType=secEnterprise&amp;locale=en&amp;timeout=60&amp;ConvertAnyType=true"));
        return response;

    }

}//end client

Es scheint, das problem ist mit dem Wert, ich bin vorbei, um “marshaller.setContextPath("?");" seine entweder Falsches format oder nicht in der Lage, es zu finden.

1) Wie kann ich dieses Problem beheben & alle anderen Probleme, die mit dieser Umsetzung?

2) (optional) Für die um des Wissens Willen "marshaller.setContextPath()" & auch die "client.setDefaultUri()"?

Danke an Euch alle.

InformationsquelleAutor cyber101 | 2014-10-30
Schreibe einen Kommentar