Wywoływanie metod Web Service'u z poziomu Javy

0

Czesc,

mam za zadanie wywolac 2 metody Web Service'u z poziomu Javy. Dostalem plik WSDL oraz podano mi nazwy metod, ktore musze wywolac. Czy mozecie mi podpowiedziec jak do tego podejsc, jakiej klasy uzyc?
Nie wiem czy dostalem prawidlowy plik, poniewaz nie ma tam nazw metod, ktore mam wywolac.

Dzieki

0

Tutorial JAX-WS:
http://download.oracle.com/javaee/5/tutorial/doc/bnayn.html
I źródła do niego:
http://java.net/projects/javaeetutorial/downloads/download/javaeetutorial5.zip

Interesuje Ciebie część "A Simple JAX-WS Client"

Najpierw musisz wygenerować interfejs web servicu na podstawie wsdla programem wsimport http://download.oracle.com/javase/6/docs/technotes/tools/share/wsimport.html

(To jest najbardziej standardowy sposób budowania klienta. Jeżeli klient będzie aplikacją na JBossie, to polecam CXF albo Jboss Native - http://www.jboss.org/jbossws)

0

Dzieki za pomoc,
uzylem wsimport i zostaly wygenerowane klasy. Dwie wkleilem ponizej (wydaje mi sie, ze one sa kluczowe), pozostale dotycza wyjatkow oraz odpowiadaja za schema.
Chcialbym Was prosic o pomoc w utworzeniu klienta, ktory bedzie wywolywal metode ciPRTLSSCIAUTHENTICATE, nastepnie ciPRTLSSCIGETUSERID. Zdaje sobie sprawe, ze to pewnie nie jest trudne do zrobienia, ale dopiero co zaczalem przygode z Java i niestety mam odpowiedniej wiedzy jak to zrobic.
Za wszelka pomoc z gory dziekuje.

<code = java>
package com.oracle.xmlns.enterprise.enterpriseportal.services.ci_prtl_ss_ci;

import java.net.MalformedURLException;
import java.net.URL;
import javax.xml.namespace.QName;
import javax.xml.ws.Service;
import javax.xml.ws.WebEndpoint;
import javax.xml.ws.WebServiceClient;
import javax.xml.ws.WebServiceFeature;

/**

  • CI_PRTL_SS_CI
  • This class was generated by the JAX-WS RI.
  • JAX-WS RI 2.1.1 in JDK 6
  • Generated source version: 2.1

*/
@WebServiceClient(name = "CI_PRTL_SS_CI", targetNamespace = "http://xmlns.oracle.com/Enterprise/EnterprisePortal/services/CI_PRTL_SS_CI.1", wsdlLocation = "http://domena/PSIGW/PeopleSoftServiceListeningConnector/CI_PRTL_SS_CI.1.wsdl")
public class CIPRTLSSCI
extends Service
{

private final static URL CIPRTLSSCI_WSDL_LOCATION;

static {
    URL url = null;
    try {
        url = new URL("http://domena/PSIGW/PeopleSoftServiceListeningConnector/CI_PRTL_SS_CI.1.wsdl");
    } catch (MalformedURLException e) {
        e.printStackTrace();
    }
    CIPRTLSSCI_WSDL_LOCATION = url;
}

public CIPRTLSSCI(URL wsdlLocation, QName serviceName) {
    super(wsdlLocation, serviceName);
}

public CIPRTLSSCI() {
    super(CIPRTLSSCI_WSDL_LOCATION, new QName("http://xmlns.oracle.com/Enterprise/EnterprisePortal/services/CI_PRTL_SS_CI.1", "CI_PRTL_SS_CI"));
}

/**
 * 
 * @return
 *     returns CIPRTLSSCIPortType
 */
@WebEndpoint(name = "CI_PRTL_SS_CI_Port")
public CIPRTLSSCIPortType getCIPRTLSSCIPort() {
    return (CIPRTLSSCIPortType)super.getPort(new QName("http://xmlns.oracle.com/Enterprise/EnterprisePortal/services/CI_PRTL_SS_CI.1", "CI_PRTL_SS_CI_Port"), CIPRTLSSCIPortType.class);
}

/**
 * 
 * @param features
 *     A list of {@link javax.xml.ws.WebServiceFeature} to configure on the proxy.  Supported features not in the `features` parameter will have their default values.
 * @return
 *     returns CIPRTLSSCIPortType
 */
@WebEndpoint(name = "CI_PRTL_SS_CI_Port")
public CIPRTLSSCIPortType getCIPRTLSSCIPort(WebServiceFeature... features) {
    return (CIPRTLSSCIPortType)super.getPort(new QName("http://xmlns.oracle.com/Enterprise/EnterprisePortal/services/CI_PRTL_SS_CI.1", "CI_PRTL_SS_CI_Port"), CIPRTLSSCIPortType.class, features);
}

}


<code = java> 
package com.oracle.xmlns.enterprise.enterpriseportal.services.ci_prtl_ss_ci;

import javax.jws.WebMethod;
import javax.jws.WebParam;
import javax.jws.WebResult;
import javax.jws.WebService;
import javax.jws.soap.SOAPBinding;
import javax.xml.bind.annotation.XmlSeeAlso;
import com.oracle.xmlns.enterprise.tools.schemas.m484626.GetUserIDCompIntfcPRTLSSCITypeShape;
import com.oracle.xmlns.enterprise.tools.schemas.m781668.GetCompIntfcPRTLSSCITypeShape;
import com.oracle.xmlns.enterprise.tools.schemas.m823493.AuthenticateCompIntfcPRTLSSCITypeShape;
import com.oracle.xmlns.enterprise.tools.schemas.m937487.GetCompIntfcPRTLSSCIResponseTypeShape;


/**
 * This class was generated by the JAX-WS RI.
 * JAX-WS RI 2.1.1 in JDK 6
 * Generated source version: 2.1
 * 
 */
@WebService(name = "CI_PRTL_SS_CI_PortType", targetNamespace = "http://xmlns.oracle.com/Enterprise/EnterprisePortal/services/CI_PRTL_SS_CI.1")
@SOAPBinding(parameterStyle = SOAPBinding.ParameterStyle.BARE)
@XmlSeeAlso({
    com.oracle.xmlns.enterprise.tools.schemas.m781668.ObjectFactory.class,
    com.oracle.xmlns.enterprise.tools.schemas.m256819.ObjectFactory.class,
    com.oracle.xmlns.enterprise.tools.schemas.m937487.ObjectFactory.class,
    com.oracle.xmlns.enterprise.tools.schemas.m705716.ObjectFactory.class,
    com.oracle.xmlns.enterprise.tools.schemas.m484626.ObjectFactory.class,
    com.oracle.xmlns.enterprise.tools.schemas.m823493.ObjectFactory.class,
    com.oracle.xmlns.enterprise.tools.schemas.m503123.ObjectFactory.class,
    com.oracle.xmlns.enterprise.tools.schemas.m297468.ObjectFactory.class,
    com.oracle.xmlns.enterprise.tools.schemas.m1040650.ObjectFactory.class
})
public interface CIPRTLSSCIPortType {


    /**
     * CI_PRTL_SS_CI_AUTHENTICATE
     * 
     * @param parameter
     * @return
     *     returns java.lang.String
     * @throws M705716V1
     */
    @WebMethod(operationName = "CI_PRTL_SS_CI_AUTHENTICATE", action = "CI_PRTL_SS_CI_AUTHENTICATE.V1")
    @WebResult(name = "Authenticate__CompIntfc__PRTL_SS_CIResponse", targetNamespace = "http://xmlns.oracle.com/Enterprise/Tools/schemas/M297468.V1", partName = "parameter")
    public String ciPRTLSSCIAUTHENTICATE(
        @WebParam(name = "Authenticate__CompIntfc__PRTL_SS_CI", targetNamespace = "http://xmlns.oracle.com/Enterprise/Tools/schemas/M823493.V1", partName = "parameter")
        AuthenticateCompIntfcPRTLSSCITypeShape parameter)
        throws M705716V1
    ;

    /**
     * CI_PRTL_SS_CI_G
     * 
     * @param parameter
     * @return
     *     returns com.oracle.xmlns.enterprise.tools.schemas.m937487.GetCompIntfcPRTLSSCIResponseTypeShape
     * @throws M503123V1
     */
    @WebMethod(operationName = "CI_PRTL_SS_CI_G", action = "CI_PRTL_SS_CI_G.V1")
    @WebResult(name = "Get__CompIntfc__PRTL_SS_CIResponse", targetNamespace = "http://xmlns.oracle.com/Enterprise/Tools/schemas/M937487.V1", partName = "parameter")
    public GetCompIntfcPRTLSSCIResponseTypeShape ciPRTLSSCIG(
        @WebParam(name = "Get__CompIntfc__PRTL_SS_CI", targetNamespace = "http://xmlns.oracle.com/Enterprise/Tools/schemas/M781668.V1", partName = "parameter")
        GetCompIntfcPRTLSSCITypeShape parameter)
        throws M503123V1
    ;

    /**
     * CI_PRTL_SS_CI_GET_USERID
     * 
     * @param parameter
     * @return
     *     returns java.lang.String
     * @throws M256819V1
     */
    @WebMethod(operationName = "CI_PRTL_SS_CI_GET_USERID", action = "CI_PRTL_SS_CI_GET_USERID.V1")
    @WebResult(name = "Get_UserID__CompIntfc__PRTL_SS_CIResponse", targetNamespace = "http://xmlns.oracle.com/Enterprise/Tools/schemas/M1040650.V1", partName = "parameter")
    public String ciPRTLSSCIGETUSERID(
        @WebParam(name = "Get_UserID__CompIntfc__PRTL_SS_CI", targetNamespace = "http://xmlns.oracle.com/Enterprise/Tools/schemas/M484626.V1", partName = "parameter")
        GetUserIDCompIntfcPRTLSSCITypeShape parameter)
        throws M256819V1
    ;
}

1

Powinno to wyglądać mniej więcej tak: (piszę bez kompilatora, więc mogą być drobne błędy)

 public class Main {
   public static void main(String[] args) {
      CIPRTLSSCI client = new CIPRTLSSCI();
      CIPRTLSSCIPortType port = client.getCIPRTLSSCIPort(); 
      port.ciPRTLSSCIAUTHENTICATE(/* Tutaj instancja AuthenticateCompIntfcPRTLSSCITypeShape */);
      port.ciPRTLSSCIGETUSERID(/*Tutaj instancja GetUserIDCompIntfcPRTLSSCITypeShape */);
  }
}
0

Czesc,
napisalem ponizszy kod, ale niestety to nie dziala i wyrzuca mi blad przy wywolaniu metody ciPRTLSSCIAUTHENTICATE. Zalaczylem zrzut bledu stackTrace(jest tam linijka, ktora jest napisane: $Proxy82.ciPRTLSSCIAUTHENTICATE(Unknown Source) - mysle, ze to moze byc przyczyna bledu, tylko nie wiem czy WebServicu czy mojego kodu). Aby lepiej poznac co to za blad, chcialem skorzystac z klas, ktore generuja komunikaty o bledzie - sa to 3 zakomentowane linie. Niestety tutaj tez mi wywala blad zwiazany z ArrayList, mimo tego, ze wartosc metody getValue ma zwracac stringa. Zalaczylem rowniez definicje klas, poprzez ktore chcialem sie dostac do komunikatu bledu.

<code = java>

    CIPRTLSSCI client = new CIPRTLSSCI();
	CIPRTLSSCIPortType port = client.getCIPRTLSSCIPort(); 
	AuthenticateCompIntfcPRTLSSCITypeShape message = new AuthenticateCompIntfcPRTLSSCITypeShape();
	message.setStringParm(token);
	try {
		String response = port.ciPRTLSSCIAUTHENTICATE(message);
	} catch (M705716V1 e) {	
	
		//List<IBResponseComplexTypeShape> zm  = e.getFaultInfo().getIBResponse();			
		//DefaultTitleTypeShape ss = ((IBResponseComplexTypeShape) zm).getDefaultTitle();
		//System.out.println("DefaultTitle: " + ss.getValue());

		e.printStackTrace();
	}
0

Pierwsza linia pod catch powinna wygladac tak (brakuje tam <IBResponseComplexTypeShape> )

List<IBResponseComplexTypeShape> zm  = e.getFaultInfo().getIBResponse();

dolaczylem jeszcze zrzut stackTrace, ktorego zabraklo we wczesniejszym zalaczniku.

Wykonalem ta sama metode ciPRTLSSCIAUTHENTICATE poprzez SoapUI i dostalem taka odpowiedz:

<SOAP-ENV:Envelope xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/">
   <SOAP-ENV:Body>
      <SOAP-ENV:Fault>
         <faultcode>SOAP-ENV:Server</faultcode>
         <faultstring/>
         <detail>
            <CIFault xmlns="http://xmlns.oracle.com/Enterprise/Tools/schemas/M705716.V1">
               <IBResponse type="error">
                  <DefaultTitle>Integration Broker Response</DefaultTitle>
                  <StatusCode>20</StatusCode>
                  <MessageSetID>90</MessageSetID>
                  <MessageID>6</MessageID>
                  <DefaultMessage>Not Authorized (90,6)</DefaultMessage>
               </IBResponse>
            </CIFault>
         </detail>
      </SOAP-ENV:Fault>
   </SOAP-ENV:Body>
</SOAP-ENV:Envelope>

Podejrzewam, ze token, ktory dostaje jest niewazny. Czlowiek od Web Servicu nie wie dlaczego SoapUI taka odpowiedz zwraca. Powiedzial, ze skonfigurowal drugi WebService i za pomoca niego odpytal ten pierwszy i ponoc bylo bez bledow. Jakos nie chce mu wierzyc, tym bardziej, ze mowil mi, ze plik WSDL, ktory nie mial w sobie opisanych wczesniej metod jest prawidlowy.

0

Hej,

jak sie okazalo, Web Service byl nieprawidlowo skonfigurowany. Teraz wszystko dziala prawidlowo.

Krzysiek, dziekuje za pomoc.

Pozdrawiam.

1 użytkowników online, w tym zalogowanych: 0, gości: 1