How to create a new item for a rosjava service list
I'm using the git repositories pulled with wstool as described at:
http://wiki.ros.org/rosjava/Tutorials/indigo/Source%20Installation
I added a new msg, rosjava/src/rosjava_test_msgs/msg/PhoneContact.msg
string last_name
string first_name
string phone_number
I also added a new srv, SendContactsSmsMsg.srv
PhoneContact contact0
PhoneContact contact1
PhoneContact contact2
PhoneContact contact3
PhoneContact contact4
PhoneContact[] contact_list
string message
---
bool status
I added a new test client called SendContactsSmsMsgClient.java to:
~/rosjava/src/rosjava_core/rosjava_tutorial_services/src/main/java/org/ros/rosjava_tutorial_services
I've Cut-N-Pasted a copy below and would like to discuss it.
I'd like to remove the contact1...contac4 above. I added them because I'm having difficulty creating a PhoneContact to add to the contact_list above.
The genjava git repo seems to be generating only interface files which can't create an instance. For example:
Line 116 below rosjava_test_msgs.PhoneContact contact = new PhoneContact();
doesn't work because the public definition is only an interface. I tried implementing my on Phone Contact (Lines 41...79) below but I'm getting problems with the Raw Message class not being public.
Seems there should be a simple solution to this problem. My HACK is to get instances from the request message, modify them, and add them to the list (See lines 123...140).
I'm just sending a list of phone contacts with a message and sending the msg via SMS messaging interfaces available in Android. This test program just send the RPC and decodes the RPC. I'd image that creating a RPC with a list/array has been done a long time ago and it's trivial to add a instance of my phone_contact msg.
What's the trick?
1 /*
2 * Copyright (C) 2011 Google Inc.
3 *
4 * Licensed under the Apache License, Version 2.0 (the "License"); you may not
5 * use this file except in compliance with the License. You may obtain a copy of
6 * the License at
7 *
8 * http://www.apache.org/licenses/LICENSE-2.0
9 *
10 * Unless required by applicable law or agreed to in writing, software
11 * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
12 * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
13 * License for the specific language governing permissions and limitations under
14 * the License.
15 */
16
17 package org.ros.rosjava_tutorial_services;
18
19 import org.ros.exception.RemoteException;
20 import org.ros.exception.RosRuntimeException;
21 import org.ros.exception.ServiceNotFoundException;
22 import org.ros.namespace.GraphName;
23 import org.ros.node.AbstractNodeMain;
24 import org.ros.node.ConnectedNode;
25 import org.ros.node.NodeMain;
26 import org.ros.node.service.ServiceClient;
27 import org.ros.node.service.ServiceResponseListener;
28
29 import org.jboss.netty.buffer.ChannelBuffer;
30 import org.ros.exception.RosMessageRuntimeException;
31 import org.ros.internal.message.context.MessageContext;
32 import org.ros.internal.message.field.Field;
33 import org.ros.internal.message.field.MessageFieldType;
34 import org.ros.internal.message.field.MessageFields;
35 import org.ros ...