Ответ на этот вопрос был довольно сложным. Оказывается, что версия jettison, используемая плагином jax-ws json, немного устарела (1.0-beta-1 IIRC). Эта конкретная версия плохо справляется с этим делом (она вылетает). Если вы добавите @XmlSeeAlso, то маршаллинг JSON потерпит крах! Конечно, это отстой!
Я читал на каком-то форуме (нет ссылки - это все из памяти), что плагин jax-ws json активно не поддерживается. Если вы попытаетесь 1) исключить стандартную зависимость jettison из зависимости jax-ws json (при условии, что здесь используется maven) и добавить более новую версию, вы получите сообщение об отсутствии JSONException Jax-ws json НЕ будет работать с более новой версией Jettison (я пытался).
Это задокументировано на другом сайте (кто-то заявил, что он хотел бы, чтобы кто-то перенес jax-ws json на последнюю версию).
В конце концов я переключился на DWR для удаленного взаимодействия. JAX-WS лучше всего подходит для межсистемной (серверной) интеграции. Он слишком тяжелый для фронтэнда. DWR в этом случае работает УДИВИТЕЛЬНО.
Нашел ссылку на форум, который я прочитал: http://forums.java.net/jive/thread.jspa?messageID=384385. Обратите внимание, что Collab.net в настоящее время недоступен для технического обслуживания, но они скоро вернутся.
Что касается ответа на общий вопрос (без части плагина JAX-WS JSON), ответ - да - вы должны использовать аннотацию @XmlSeeAlso в классе Person. В противном случае схема будет содержать только элементы Person, а не Teacher или Student. Только элементы, определенные в Person, маршалируются без аннотации @XmlSeeAlso.