Witam wszystkich.
Mam mały problem, może nie do końca związany z ABAP-em no ale może ktoś będzie mógł Mi pomóc, więc:
1. Stworzyłem serwis w BC, który wywołuje prostą funkcję RFC w SAP(do parametru wejściowego "IN" dodaje liczbę 10 i zwracam w parametrze "OUT").
2. Serwis ten ma jeden argument wejściowy "IN" i wyjściowy "OUT".
3.W zakładce ustawienia ustawiłem dane dla "Universal Name":
-Namespace name: http://www.test.java/JAVA/
-Local name: getJAVA
4.Chciałbym wywołać ten serwis z poziomu JAVY przy wykorzystaniu SOAP.
Napisałem program:
import java.net.MalformedURLException;
import java.net.URL;
import java.util.Vector;
import javax.mail.MessagingException;
import javax.mail.internet.MimeBodyPart;
import org.apache.soap.Constants;
import org.apache.soap.Fault;
import org.apache.soap.SOAPException;
import org.apache.soap.rpc.Call;
import org.apache.soap.rpc.Parameter;
import org.apache.soap.rpc.Response;
public class TEST1 {
public static void main(String[] args){
//build a Call object
URL url;
Call call = new Call();
call.setTargetObjectURI("http://www.test.java/JAVA/");
call.setMethodName("getJAVA");
call.setEncodingStyleURI(Constants.NS_URI_SOAP_ENC);
//creating a parameter list
Vector params = new Vector();
params.addElement(new Parameter("IN", String.class,"1",Constants.NS_URI_SOAP_ENC));
//adding the parameter(s) to the Call object
call.setParams(params);
System.out.println(call.getParams());
try {
url = new URL ("http://skasv04:3125/soap/rpc");
try {
Response res = call.invoke(url, "");
if( res.generatedFault() ==false)
{
Parameter retValue = res.getReturnValue();
Object value = retValue.getValue();
System.out.println(value);
}else
{
Fault fault = res.getFault();
System.out.println(" Fault code: " + fault.getFaultCode());
System.out.println(" Fault string: "+fault.getFaultString());
}
} catch (SOAPException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
} catch (MalformedURLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
No i oczywiście nie bardzo chce Mi to działać .
Dostaje wyjątek : [B2BCORE.0088.0001] SOAPException: [B2BSERV.0088.9134] Exception occuredd while processing the body of the message.
Czy może ktoś wie w czym tkwi problem ??
SOAP, JAVA i Business Connector
-
- Posty: 99
- Rejestracja: wt cze 19, 2007 10:21 am
- Lokalizacja: Kraków
- Has thanked: 2 times
- Been thanked: 5 times
-
- Posty: 561
- Rejestracja: śr kwie 04, 2007 4:32 pm
- Lokalizacja: Poznań
- Has thanked: 9 times
- Been thanked: 165 times
- Kontakt:
Rzuć proszę okiem jakie masz uprawnienia wykonywania serwisu w SAP BC. Miałem podobny problem i okazało się, że uprawnienia ACL dla serwisu SOAP/RPC powinny być ustawione na "Anonymous" (SAP BC w wersji 4.7). Ponadto możesz spróbować wywołać ten serwis z poziomu samego SAP BC korzystając z serwisu pub.client.soapRPC. Jeżeli tu będzie wszystko działało to problem leży najprawdopodobniej w warstwie SOAP pochodzącej ze stajni Apache. A tak poza konkursem: przecież serwis SAP BC można wywołać natywnie z poziomu swojego programu w Java. Jest to szybsze i bardziej niezawodne niż SOAP/RPC. Nie lepiej pójść w tę stronę? Albo jeszcze bardziej hard core'owo - skoro serwis BC wywołuje funkcję RFC w SAP to nie lepiej skorzystać z JCo i w ogóle nie zawracać sobie głowy SAP BC?
Pozdrawiam,
Jacek Witczak
Pozdrawiam,
Jacek Witczak
Ostatnio zmieniony pt lis 14, 2008 4:32 pm przez yacol, łącznie zmieniany 1 raz.
-
- Posty: 99
- Rejestracja: wt cze 19, 2007 10:21 am
- Lokalizacja: Kraków
- Has thanked: 2 times
- Been thanked: 5 times
Po zmianie ACL na "Anonymous" prawie zadziałało (musiałem dodać Deserializer'a i wtedy poszło) - Wielkie Dzięki.
Tylko samo rozwiązanie jest trochę toporne.
Wspomniałeś że jest możliwość bezpośredniego wywołania serwisu BC z poziomu JAVA, czy jest gdzieś jakaś dokumentacja na ten temat??
Niestety JCo odpada.
Tylko samo rozwiązanie jest trochę toporne.
Wspomniałeś że jest możliwość bezpośredniego wywołania serwisu BC z poziomu JAVA, czy jest gdzieś jakaś dokumentacja na ten temat??
Niestety JCo odpada.
Pozdrawiam
Michał Nowak
Michał Nowak
-
- Posty: 561
- Rejestracja: śr kwie 04, 2007 4:32 pm
- Lokalizacja: Poznań
- Has thanked: 9 times
- Been thanked: 165 times
- Kontakt:
Oczywiście, że jest dostępna dokumentacja znajdziesz ją w PDF'ach dołączonych do SAP BC Developera. Dokładniej w SAPBC Developer Guide w rozdziale zatytułowanym: Creating Client Code/Building a Java Client.
Generalnie jest dostępny prosty generator z poziomu Developera. Zaznaczasz właściwy serwis, z menu Developera wybierasz Compose/Generate Code, potem wybierasz For calling this service from a client i klikasz przycisk Next. Następnie wybierasz, że ma to być wygenerowany przykład dla języka Java, klikasz Next i wskazujesz katalog gdzie mają powstać przykładowe pliki. W nich WSZYSTKO znajdziesz co będzie potrzebne. Pamiętaj tylko, żeby Twój kod w Javie widział plik client.jar (w classpath) z SAP BC. Szybko, prosto, wygodnie i... za darmo
Szkoda, że JCo odpada bo do tego idealnie się nadaje a wykorzystywanie SAP BC tylko po to, żeby z Java wywołać jakąś funkcję RFC w SAP to wyciąganie armaty na muchę - zresztą - JCo to rdzeń SAP BC więc pośrednio i tak wykorzystujesz JCo
Pozdrawiam,
Jacek Witczak
Generalnie jest dostępny prosty generator z poziomu Developera. Zaznaczasz właściwy serwis, z menu Developera wybierasz Compose/Generate Code, potem wybierasz For calling this service from a client i klikasz przycisk Next. Następnie wybierasz, że ma to być wygenerowany przykład dla języka Java, klikasz Next i wskazujesz katalog gdzie mają powstać przykładowe pliki. W nich WSZYSTKO znajdziesz co będzie potrzebne. Pamiętaj tylko, żeby Twój kod w Javie widział plik client.jar (w classpath) z SAP BC. Szybko, prosto, wygodnie i... za darmo
Szkoda, że JCo odpada bo do tego idealnie się nadaje a wykorzystywanie SAP BC tylko po to, żeby z Java wywołać jakąś funkcję RFC w SAP to wyciąganie armaty na muchę - zresztą - JCo to rdzeń SAP BC więc pośrednio i tak wykorzystujesz JCo
Pozdrawiam,
Jacek Witczak
-
- Posty: 99
- Rejestracja: wt cze 19, 2007 10:21 am
- Lokalizacja: Kraków
- Has thanked: 2 times
- Been thanked: 5 times