http://wiki.ros.org/urdf/XML/joint
You need to set the hard limits in the urdf file, and make sure the joint is not set to continuous.
It sounds like you only have "safety limits" set, or the limits for the ros_controller set and not the physical limits.
See this example from https://bitbucket.org/osrf/drcsim/src...
Note the difference between lower/upper hard limits of revolute joint, and the soft_*_limits.
<joint name="back_bkx" type="revolute">
<origin rpy="0 0 0" xyz="0 0 0.05"/>
<axis xyz="1 0 0"/>
<parent link="mtorso"/>
<child link="utorso"/>
<dynamics damping="0.1" friction="0"/>
<limit effort="300" lower="-0.523599" upper="0.523599" velocity="12"/>
<safety_controller k_position="100" k_velocity="100" soft_lower_limit="-10.5236" soft_upper_limit="10.5236"/>
</joint>