Java API zwracanie wyniku złożonego elementu XML

Odpowiedz Nowy wątek
2018-12-12 07:04
0

Czy można zmusić Jave jeśli tak to jak, do zwracania wyniku w postaci String, złożonego elementu XML, do którego mogę wprost dobrać się poprzez wywołanie metody w Kliencie programu?

W tym przypadku serwerem jest Java. A nie za bardzo widzi mi sie osobna serializacja XML'a. Nadmienię, że przeciążając metodę ToString() w konsoli Javy widzę wyniki jakie chcę. Ściągając je w kliencie C# mam tylko nazwę klasy nie metodę.

Próbuję tak:

Metoda:

@WebMethod
    public @WebResult(name = "bikes")
    List<Bike> returnCasetteString(){
        List<Bike> result = new ArrayList<>();
        for (Bike b: bikes) {
            if (b.getCassette()) {
            result.add(b);
        }
    }
        return result;
    }

Ale mu się nie podoba:
Cassette cannot convert to boolean w tym warunku ...

Konstruktor metody:

 @XmlElement(name = "cassette")
    public Cassette getCassette() {
        return cassette;
    }

    public void setCassette(Cassette cassette) {
    this.cassette = cassette;
    }

I klasa, gdzie są rozbite wyniki:

public Cassette(Integer upper, Integer lower) {
        this.upper = upper;
        this.lower = lower;
    }

    public Integer getUpper() {
        return upper;
    }

itd.
i wynik:

  @Override
        public String toString() {
        return ""+ upper + "-" + lower + "\n\r";

I chciałem to ściągnąć w kliencie C#:
bikes[] bike = null;

            BikeManagerClient bk = new BikeManagerClient();
            bike = bk.returnCasetteString();

I wynik zapisać w DataGridView w kolumnie o nazwie: "Cassete".
Wynikiem powinno być np: 11-30 a w tej chwili wyskakuje: BooksClient.BIKE.countertop tylko coś takiego w polu DGV.
Ktoś podpowie jak to zrobić?
Widziałem pare wątków na StackOverlow, ale tam każdy serializuje ten plik XML. A nawet jakbym chciał to zrobić to nie wiem skąd on się bierze w kliencie C#, ani gdzie tworzy się temp file, w przypadku dopisywania danych. A gdzieś musi się tworzyć - gdyż po ponownym uruchomieniu programu nowo zapisane dane są ... ale tylko na tym samym komputerze :) Nie znalazłem jednak w projekcie Visual Studio ani NetBeans plików XML, w których nastąpił zapis ...


Dziura w ścianie gdzie Panowie widzą Panie,
Rick and Morty, season 1.
Szukam tej dziury, jak coś dajcie znać gdzie jest :D

Pozostało 580 znaków

2018-12-12 09:37
0

O rany, ale chaos.

  1. if (b.getCassette()) Ci nie działa. Ale to chyba dobrze. Bo nie powinno się kompilować. if potrzebuje wyrażenia typu boolean true lub false. Casette nie jest ani true, ani false.
  2. Jeśli wyskakuje Ci coś takiego jak BooksClient.BIKE.countertop to pytanie jak wygląda ten klient C#, bo nie wiem nawet co tam musiało zajść. Może on się z twoim java serwerem wcale nie łączy i bierze dane z innego miejsca.
  3. Temp file, skąd się biorą dane... to Ty jako autor programu decydujesz, patrz pytanie wyżej. W ogóle jaki temp file ? Dlaczego miałby gdzieś być zapisany XML?

Bardzo lubie Singletony, dlatego robię po kilka instancji każdego.
edytowany 1x, ostatnio: jarekr000000, 2018-12-12 09:37

Pozostało 580 znaków

2018-12-12 10:56
0
  1. to jak mam to zrobić by mi zwróciło sparsowaną nazwę
  2. łączy się. dane dla typów prostych String, Integer się wyświetlają poprawnie.
bikes[] bike = null;
 BikeManagerClient bk = new BikeManagerClient();
                        string wynik = tBsearch.Text;
                        bike = bk.searchByName(wynik);

(...)

 dataGridView1.DataSource = bike;

tylko dla typu złożonego:

<cassette>
        <upper>30</upper>
        <lower>11</lower>
        </cassette>

jest napis jak pisałem: BooksClient.BIKE.cassette

  1. ja się tylko podłączyłem do API przez Service Reference. To JAVA odpowiada za zapis pliku XML. A pliki w folderze JAVY nie są nadpisane ... Jak wyłączę Visuala, albo program, włączę na nowo to, to co zapisałem pozostaje. Stąd wniosek, że gdzieś jest jakiś temp file XML zapisywany ale nie wiem gdzie.

Dziura w ścianie gdzie Panowie widzą Panie,
Rick and Morty, season 1.
Szukam tej dziury, jak coś dajcie znać gdzie jest :D

Pozostało 580 znaków

2018-12-12 12:20
1

Mogę się mylić, ale po pytaniach podejrzewam, że wiem gdzie jesteś i myśle, że Ty zupełnie nie wiesz gdzie jesteś.

Kojarzysz na czym polega serwis Web? jesteś w stanie go wywołać z jakiegoś innego klienta (innego niż C#) SoapUI czy cokolwiek. Btw. strzelam, że to SOAP, bo tak wygląda. Masz wsdl?
Możesz pokazać jak wygląda response z serwisu (czyli mityczny plik xml)?

IMO rozwiązaniem jest napisanie odpowiednich klas po stronie C#. Ale najpierw trzeba dojść co Ty tam w ogóle masz.


Bardzo lubie Singletony, dlatego robię po kilka instancji każdego.
edytowany 1x, ostatnio: jarekr000000, 2018-12-12 12:31

Pozostało 580 znaków

2018-12-12 12:36
0

A nie mogę skorzystać z klas Javy?

Bo jak mówisz o czyms takim:
https://stackoverflow.com/que[...]-with-multiple-child-elements

to już bym to wczoraj zrobił gdybym parsował plik XML po stronie C#. A parsuję po stronie JAVA.

I tak SOAP działa. mam plik WSDL.

Nie wiem o jaki response Ci chodzi.
O któryś z tych plików?

https://zapodaj.net/d3e828eb68c48.png.html

EDIT://

https://zapodaj.net/f604460107ccd.png.html

C# widzi te parametry pola - metoda Lower, Upper
Pytanie - jak się do tego dobrać aby wypisać wynik jako:

Upper + "-" + Lower


Dziura w ścianie gdzie Panowie widzą Panie,
Rick and Morty, season 1.
Szukam tej dziury, jak coś dajcie znać gdzie jest :D
edytowany 1x, ostatnio: youmound, 2018-12-12 12:53

Pozostało 580 znaków

2018-12-12 14:34
0

Jak to parsujesz xml po stronie javy? To co w takim razie zwraca web service? Bo z kodu wynika, że jest on w javie.. ergo w javie to ty xml tworzysz. A parsujesz w c#. Chyba, że jest wiecej tych xmli...


Bardzo lubie Singletony, dlatego robię po kilka instancji każdego.

Pozostało 580 znaków

2018-12-12 16:33
0

jak parsuję w XML. W XML wywołuję metodę jak searchByName() , która jest zresztą w JAVA zaimplementowana...

wszystko robi JAVA. C# tylko wyświetla wyniki ... i wywołuje funkcje z JAVA.


Dziura w ścianie gdzie Panowie widzą Panie,
Rick and Morty, season 1.
Szukam tej dziury, jak coś dajcie znać gdzie jest :D

Pozostało 580 znaków

Odpowiedz
Liczba odpowiedzi na stronę

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