Zajmuję się tworzeniem usługi WWW Java, która będzie używana przez klientów .Net. Usługa udostępnia metodę, która akceptuje obiekt jako argument, ten obiekt ma pole typu Lista, klasa Wiersz ma również pole typu Lista.Wywołanie usługi Java Web Service z domeny .Net korzystającej z listy <T>
Teraz, gdy klient Java korzysta z tej usługi, poprawnie widzi typy jako List, jednak gdy klient .Net zużywa usługę, którą kończę, oczekując połączenia z tablicą typu Value (np. Value [] []) zamiast listy.
Zgodność wersji została ustawiona na ".Net 3.5/METRO 1.3".
Czy ktoś wie, w jaki sposób mogę uzyskać to samo z klientami .Net i Java w tym, że akceptują listę zamiast wartości [] []?
wycięte wersje usługi internetowej to:
Usługa:
@WebService(serviceName = "Test")
public class Test {
@WebMethod(operationName = "DataRequest")
public DataResponse DataRequest(DataRequest req) {
return new DataResponse();
}
}
DataRequest:
public class DataRequest {
public DataType datType;
public String source;
public List<RowInfo> rows;
public String loginId;
}
RowInfo:
public class RowInfo {
public List<Value> valueList;
}
Wartość:
public class Value {
public String name;
public String value;
}
Na moim kliencie .Net, kiedy próbuję zbudować obiekt żądania, widzi pole wierszy FeeDataRequest jako wartość [] [] zamiast listy.
Odwołanie do usługi w .Net zostało skonfigurowane w taki sposób, że typem kolekcji jest System.Collections.Generic.List.
Każdy pomysł, jak zrobić .Net widzi to poprawnie?
Do integracji międzyjęzykowej przy użyciu WSDL zdecydowanie zalecam podejście oparte na umowie, zaprojektuj WSDL (+ XSD), wygeneruj po stronie serwera kod Java i kod .net po stronie klienta. To trochę więcej pracy, ale masz większe szanse, że to działa. – home
+1 do @home za uderzenie w kwadrat na nosie. W rzeczywistości WS nie wspiera natywnie kolekcji Java ani Map. Chociaż niektórzy dostawcy, tacy jak Oracle, mają własne rozszerzenia, których można użyć do osiągnięcia tego celu, lepiej jest wdrożyć wieloplatformową usługę internetową z projektowaniem od góry do dołu. – Perception
Dzięki @Perception. Inną (moim zdaniem) zaletą jest to, że masz umowę _explicit_ zdefiniowaną w formacie niezależnym od języka, co w jakiś sposób zmusza Cię do utrzymania małego i ścisłego interfejsu. – home