Enter order, Java, Invalid parameter market_id

Added by Christian about 3 years ago

Hej,

Jag har lite problem med att få till enter order i java. Jag har följande kod:

public boolean enterOrder(int accno, Order order)
{
Response response = baseResource.path("accounts").path(String.valueOf(accno)).path("orders").request(responseType).post(Entity.json(order));
//mer kod
}

Jag har jobbat väldigt lite med javax.ws.rs bitarna, så jag har utgått i från att Entity.json(order) omvandlar mitt Order obejct till json format (dokumentationen på metoden säger inte så mycket).

Svaret jag får från testsystemet är: NEXT_INVALID_PARAMETER, Invalid parameter market_id.

Betyder det att testsystemet har tagit emot en korrekt json representation av mitt Order objekt och att värdet i market_id är fel. Eller betyder det att json representation av Order objektet är fel, exempelvis felaktigt namn på market_id?

Tacksom för all hjälp!

/CG


Replies (11)

RE: Enter order, Java, Invalid parameter market_id - Added by Lars about 3 years ago

Skriv ut din json-sträng och posta den (du kan "blanka ut" kontonumret om du vill) så kanske någon har en chans att hjälpa dig.

RE: Enter order, Java, Invalid parameter market_id - Added by Christian about 3 years ago

Jag antar att du menar json strängen av Order objeket. Där har jag problem. Jag vet inte hur man får ut json strängen från Entity.json(order). Har inte hittat nått exempel som hjälper eller någon metod på Entity som gör det jag vill. Och allt detta under förutsättning att Entity.json(order) gör vad jag tror att den gör!

:-/

/Christian

RE: Enter order, Java, Invalid parameter market_id - Added by Christian about 3 years ago

Jag testade att bygga en json träng manuellt, satte accno till mitt accno, för mitt Order objekt, skickade över det och fick INTERNAL SERVER ERROR 500.

String s = "[{\"accno\": " + accno + ",\"order_id\": 0,\"price\": {\"value\": 10,\"currency\": \"sek\"},\"volume\": 1,\"tradable\": {\"identifier\": \"\",\"market_id\": 0},\"open_volume\": 0,\"traded_volume\": 0,\"side\": \"\",\"modified\": 0,\"reference\": \"\",\"activation_condition\": {\"type\": \"\",\"trailing_value\": 0,\"trigger_value\": 0,\"trigger_condition\": \"\"},\"price_condition\": \"\",\"volume_condition\": \"\",\"validity\": {\"type\": \"\",\"valid_until\": 0},\"action_state\": \"\",\"order_type\": \"\",\"order_state\": \"\"}]\n";

Betyder detta att servern kunde ta emot objektet men att det var konstiga värden i? Läste något sådant om att currency inte skulle vara små bokstäver exempelvis. Jag har inte satt alla värden i orden, men det vore bra att kunna konstatera om mitt objekt togs emot av servern (dvs. att json serialliseringen fungerade). Vore bra med fler och mer detaljerade felmedelanden från servern.

RE: Enter order, Java, Invalid parameter market_id - Added by Otto about 3 years ago

Har samma problem, säg gärna till om ni hittar en lösning!

RE: Enter order, Java, Invalid parameter market_id - Added by Otto about 3 years ago

Detta är vad jag skriver i Ruby, och får samma felmeddelande:

request = Net::HTTP::Post.new ("/next/2/accounts/" + accno.to_s + "/orders")
request.add_field('Accept', 'application/json')
request.body = {accno: 9211455, identifier: '101', market_id: 11, price: 75.00, volume: 100, currency: "SEK", side: "BUY", order_type: "NORMAL"}.to_json
request.basic_auth session_key, session_key

response = http.request request # Net::HTTPResponse object
show_account_money_data = JSON.parse(response.body)
puts show_account_money_data

RE: Enter order, Java, Invalid parameter market_id - Added by Otto about 3 years ago

Never mind, jag fick det att fungera.

Problemet är inte att market_id är fel, det är att man måste specificera "Content-Type" (vilket inte står att man måste skicka in i API-dokumentationen).

Detta gjorde att det fungerade för mig:

request = Net::HTTP::Post.new ("/next/2/accounts/" + accno.to_s + "/orders")
request.add_field('Content-Type', 'application/json')
request.body = {identifier: '101', market_id: 11, price: 75.00, volume: 100, currency: "SEK", side: "BUY", order_type: "NORMAL"}.to_json
request.basic_auth session_key, session_key
puts request.body

response = http.request request # Net::HTTPResponse object
show_account_money_data = JSON.parse(response.body)
puts show_account_money_data

RE: Enter order, Java, Invalid parameter market_id - Added by Christian about 3 years ago

Vad jag kan se så är det redan specificerat i mitt fall. Men jag kan ha fel. Om det är någon som är duktig på javax.ws.rs.client och ser vad som är fel, säg gärna till!

Response response = baseResource.path("accounts").path(String.valueOf(accno)).path("orders").request(responseType).post(Entity.json(payload));
<mer kod>
private static final MediaType responseType = MediaType.APPLICATION_JSON_TYPE;

RE: Enter order, Java, Invalid parameter market_id - Added by Christian about 3 years ago

Jag lyckades med att få igenom en order till servern:

String payload = "{\"identifier\": \"101\", \"market_id\": 11, \"price\": 75.00, \"volume\": 100, \"currency\": \"SEK\", \"side\": \"BUY\", \"order_type\": \"NORMAL\"}\n";

Men vad jag inte förstår är hur detta kan gå igenom, eftersom fältet "price" är en komplex typ (Amount) som har två fält "value" och "currency", i alla fall enligt specs. för API:t. Det finns även fler fält i Order som är komplexa, TradableId, ActivationCondition och Validity.

Ett steg i rätt riktning i alla fall...

RE: Enter order, Java, Invalid parameter market_id - Added by Björn about 3 years ago

Jag tror att du tittar på fel ställe i dokumentationen. API spec för REST-resursen "enter order":
https://api.test.nordnet.se/api-docs/index.html#!/accounts/create_order
Jag tycker ditt sista exempel ser helt rätt ut enligt spec.

RE: Enter order, Java, Invalid parameter market_id - Added by Otto about 3 years ago

Nu funkar det inte igen :( Får en empty json body som respons...

RE: Enter order, Java, Invalid parameter market_id - Added by Christian about 3 years ago

Så är det. Jag har tittat på fel ställe i doc's. :-/

(1-11/11)